Postgresql Postgres返回[]uint8而不是[]整数

Postgresql Postgres返回[]uint8而不是[]整数,postgresql,go,pq,Postgresql,Go,Pq,我将一个整数数组保存到PostgreSQL表中,当尝试检索它时,我总是得到[]uint8而不是[]int。 我尝试使用用户[]整数、[]bigint、[]smallint。什么都不管用。 该数组最多表示四个项,每个项介于1-100之间,无浮点 我正在使用Go,我有一个对象是[]int,这是字段: Quantity []int `json:"quantity" db:"quantity"` 我正在尝试修复它,但找不到使PostgreSQL返回[]int的方法 所有其他表字段都工作得很好。Quan

我将一个整数数组保存到PostgreSQL表中,当尝试检索它时,我总是得到[]uint8而不是[]int。 我尝试使用用户[]整数、[]bigint、[]smallint。什么都不管用。 该数组最多表示四个项,每个项介于1-100之间,无浮点

我正在使用Go,我有一个对象是[]int,这是字段:

Quantity []int `json:"quantity" db:"quantity"`
我正在尝试修复它,但找不到使PostgreSQL返回[]int的方法

所有其他表字段都工作得很好。
Quantity
字段的类型为
integer[]

这是插入查询:

"INSERT INTO products (product_id, name, manufacturer, image_url, quantity, amount, notes, store_id, store_name, owner_id) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)", newProduct.UID, newProduct.Name, newProduct.Manufacturer, newProduct.Image, pq.Array(newProduct.Quantity), newProduct.Amount, newProduct.Notes, newProduct.StoreID, newProduct.StoreName, newProduct.OwnerID);
这就是我试图获取数据的方式

err := rows.Scan(&temp.ID, &temp.UID, &temp.Name, &temp.Manufacturer,
        &temp.Image, &temp.Amount, &temp.Notes,
        &temp.StoreID, &temp.OwnerID, &temp.StoreName, &temp.Quantity)
问题只在于数量。 如果我将
temp对象更改为
[]uint8
而不是
[]int
,我会得到字节。

使用
pq.Array(&temp.Quantity)

按照存储方式,您也必须以这种方式检索

err := rows.Scan(&temp.ID, &temp.UID, &temp.Name, &temp.Manufacturer,
        &temp.Image, &temp.Amount, &temp.Notes,
        &temp.StoreID, &temp.OwnerID, &temp.StoreName, pq.Array(&temp.Quantity))
您还必须使用for
pq.Array()
或实现接口。对于整数,可以使用
[]sql.NullInt64
[]int64
。但最好对扫描仪和估价师界面使用相同的支持类型

查找更多详细信息

使用
pq.Array(&temp.Quantity)

按照存储方式,您也必须以这种方式检索

err := rows.Scan(&temp.ID, &temp.UID, &temp.Name, &temp.Manufacturer,
        &temp.Image, &temp.Amount, &temp.Notes,
        &temp.StoreID, &temp.OwnerID, &temp.StoreName, pq.Array(&temp.Quantity))
您还必须使用for
pq.Array()
或实现接口。对于整数,可以使用
[]sql.NullInt64
[]int64
。但最好对扫描仪和估价师界面使用相同的支持类型



查找更多详细信息

你能展示一下你是如何对数据库进行查询的吗?你使用了哪些包来进行查询?另外,显示您试图获取的表字段的类型。已编辑。我正在使用“database/sql”和“GitHub.com/lib/pq”软件包。您是否正在尝试在表中的列中插入int列表?@AbinashGhosh是的,插入确实有效,但当我尝试获取数据时,我得到的是[]uint8而不是[]int。您还需要在
扫描
中使用
pq.Array
。请注意,
[]uint8
表示字节片(
byte
uint8
的别名),它表示原始数据、未分析的postgres数组。您能说明如何查询数据库以及使用什么包吗?另外,显示您试图获取的表字段的类型。已编辑。我正在使用“database/sql”和“GitHub.com/lib/pq”软件包。您是否正在尝试在表中的列中插入int列表?@AbinashGhosh是的,插入确实有效,但当我尝试获取数据时,我得到的是[]uint8而不是[]int。您还需要在
扫描
中使用
pq.Array
。请注意,
[]uint8
表示字节片(
byte
uint8
的别名),它表示原始数据、未解析的postgres数组。谢谢,仍在尝试让它工作。如果数据库上的列类型为integer[],可以吗?或者它应该是其他的吗?不。在数据库中,它可能是字节类型,因为pq。数组帮助您做到这一点。在这里,您可以看到int数组的扫描和估值器接口的实现。谢谢,我试过了,但是我得到了这个错误:pq:解析数组元素索引0:pq:扫描到int没有实现;只有sql.Scanner非常感谢!正如您所说,我已更改为[]int64,并且它正在工作。如果我想更改为较小的整数大小,我需要实现扫描仪吗?谢谢,仍在努力使其工作。如果数据库上的列类型为integer[],可以吗?或者它应该是其他的吗?不。在数据库中,它可能是字节类型,因为pq。数组帮助您做到这一点。在这里,您可以看到int数组的扫描和估值器接口的实现。谢谢,我试过了,但是我得到了这个错误:pq:解析数组元素索引0:pq:扫描到int没有实现;只有sql.Scanner非常感谢!正如您所说,我已更改为[]int64,并且它正在工作。如果我想更改为较小的int大小,是否需要实现扫描仪?