使用带整数数组的简单PostreSQL数据库:
CREATE TABLE foo (
id serial PRIMARY KEY,
bar integer[]
);
INSERT INTO foo VALUES(DEFAULT, '{1234567, 20, 30, 40}');
Run Code Online (Sandbox Code Playgroud)
使用pq,这些值由于某种原因被检索为[] uint8的数组.
该文件说,整数类型为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)
Run Code Online (Sandbox Code Playgroud)
输出:
sql: Scan error on column index 0: unsupported Scan, storing driver.Value type []uint8 into type *[]int64
[]
Run Code Online (Sandbox Code Playgroud)
你不能使用一片int作为driver.Value.参数Scan 必须是其中一种受支持的类型,或者实现sql.Scanner接口.
您[]uint8在错误消息中看到的原因是从数据库返回的原始值是一个[]byte切片,它[]uint8是一个同义词.
要将该[]byte切片适当地解释为自定义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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
910 次 |
| 最近记录: |