Postgresql Postgres返回[]uint8而不是[]整数
我将一个整数数组保存到PostgreSQL表中,当尝试检索它时,我总是得到[]uint8而不是[]int。 我尝试使用用户[]整数、[]bigint、[]smallint。什么都不管用。 该数组最多表示四个项,每个项介于1-100之间,无浮点 我正在使用Go,我有一个对象是[]int,这是字段: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
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))
您还必须使用forpq.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))
您还必须使用forpq.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大小,是否需要实现扫描仪?