采用带有整数数组的简单 PostreSQL 数据库:
CREATE TABLE foo (
id serial PRIMARY KEY,
bar integer[]
);
INSERT INTO foo VALUES(DEFAULT, '{1234567, 20, 30, 40}');
使用 pq,这些值出于某种原因被检索为 []uint8 数组。
documentation 表示整数类型作为 int64 返回。这是否也不适用于数组?
db, err := sql.Open("postgres", "user=a_user password=your_pwd dbname=blah")
if err != nil {
fmt.Println(err)
}
var ret []int
err = db.QueryRow("SELECT bar FROM foo WHERE id=$1", 1).Scan(&ret)
if err != nil {
fmt.Println(err)
}
fmt.Println(ret)
输出:
sql: Scan error on column index 0: unsupported Scan, storing driver.Value type []uint8 into type *[]int64
[]
最佳答案
您不能将 int 的一部分用作 driver.Value
。 Scan
的参数必须 是supported types 之一,或实现 sql.Scanner界面。
您在错误消息中看到 []uint8
的原因是从数据库返回的原始值是一个 []byte
slice ,其中 []uint8
是同义词。
要将 []byte
slice 适本地解释为自定义 PostgreSQL 数组类型,您应该使用 pq 中定义的适当数组类型。包,例如 Int64Array .
尝试这样的事情:
var ret pq.Int64Array
err = db.QueryRow("SELECT bar FROM foo WHERE id=$1", 1).Scan(&ret)
if err != nil {
fmt.Println(err)
}
fmt.Println(ret)
关于go - 从 PostgreSQL 查询整数数组总是返回 []uint8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47962615/