gpt4 book ai didi

postgresql - 不支持的扫描 : SQL UUID Array

转载 作者:IT王子 更新时间:2023-10-29 02:14:50 46 4
gpt4 key购买 nike

我正在尝试从 PostgreSQL 数据库中获取一组 UUID,这会出现以下错误:

sql: Scan error on column index 0: unsupported Scan, storing driver.Value type []uint8 into type *[]string

获取单个 UUID 没有问题,但是当它是一个 array 时,Scan 函数将元素的类型推断为 uint8

是否有解决方法/解决方案?还是我应该重新考虑我的数据库?

代码:

func FetchListIdsForUser(id string, db *sql.DB) ([]string, error) {

// where the results will be stored

var (
lists []string
)


// statement prep

stmt, err := db.Prepare("select lists from users where object_id = $1")
if err != nil {
formattedError := er.New("FetchListIdsForUser SQL Select: " + err.Error())
log.Println(formattedError)
return nil,formattedError
}
defer stmt.Close()


// query happening

rows, err := stmt.Query(id)
if err != nil {
formattedError := er.New("FetchListIdsForUser SQL Query: " + err.Error())
log.Println(formattedError)
return nil,formattedError
}

defer rows.Close()


// for each row

for rows.Next() {

// scan : this is where the error happens.

err := rows.Scan(&lists)
if err != nil {
formattedError := er.New("FetchListIdsForUser SQL Scan: " + err.Error())
log.Println(formattedError)
return nil,formattedError
}
return lists,nil
}

err = rows.Err()
if err != nil {
formattedError := er.New("FetchListIdsForUser: " + id + " Does Not Exist")
log.Println(formattedError)
return nil,formattedError
}
return nil,er.New("FetchListIdsForUser: " + id + " Does Not Exist")
}

最佳答案

你的代码可以简化很多:

func FetchListIdsForUser(id string, db *sql.DB) ([]string, error) {

rows, err := db.Query("SELECT unnest(lists) FROM users WHERE object_id = $1", id)
if err != nil {
formattedError := errors.New("FetchListIdsForUser SQL Query: " + err.Error())
return nil, formattedError
}

defer rows.Close()

var lists []string
var list string

for rows.Next() {
// scan every item of the array and append it to lists
err := rows.Scan(&list)
if err != nil {
formattedError := errors.New("FetchListIdsForUser SQL Scan: " + err.Error())
return nil,formattedError
}
lists = append(lists, list)
}

if lists == nil {
// no rows returned
formattedError := errors.New("FetchListIdsForUser: " + id + " Does Not Exist")
return nil, formattedError
}

return lists, nil
}
  • db.Query() 将为您准备(并缓存)语句。无需手动执行此操作。
  • 我在 select 语句中添加了 unnest(lists)。这将为数组中的每个元素生成一行。
  • 在 for 循环中,我们单独扫描每个元素并将其附加到 lists

此外,this driver支持开箱即用的扫描阵列。

关于postgresql - 不支持的扫描 : SQL UUID Array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36083147/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com