go - 从 PostgreSQL 查询整数数组总是返回 []uint8

标签 go pq

采用带有整数数组的简单 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.ValueScan 的参数必须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/

相关文章:

go - 库/pq : Runtime error when querying a database

golang 数据库/sql 使用 pq

amazon-web-services - 安全地提供来自 S3 的内容

go - 调用 db.Ping() 时的无限循环

postgresql - 为什么我在插入 postgres 后得到 ErrNoRows ("sql: no rows in result set"),即使插入实际上是成功的?

sql - 使用 Postgres 时为 "Operator does not exist: integer =?"

Godoc 样式表和 javascript

json - 将任意字段添加到未知结构的 json 输出

go - 如果不强制执行 Go 的接口(interface),它们是否有必要?

go - 一次添加两个项目以在 for 循环中构造