我正在尝试写一个查询,该查询使用一个列表参数(即,一个值列表的单个参数)。看起来这在PostgreSQL(https://stackoverflow.com/a/10829760/836390)中至少有时是可能的。我想要的是这样的东西:
rows, err := db.Query("SELECT * FROM table WHERE id in $1", []int{1, 2, 3})
但是,当我使用pq驱动程序执行此操作时,出现错误:
sql: converting Exec argument #0's type: unsupported type []int, a slice
是pq
不支持,还是database/sql
不支持,或者PostgreSQL根本不支持,还是什么?
5条答案
按热度按时间relj7zay1#
现在可以使用带切片参数的pq.Array,因此查询如下所示:
cngwdvgl2#
因此,pq似乎使用了database/sql的默认ValueConverter,它没有处理切片的能力(请参阅DefaultParameterConverter的文档)。
dkqlctbz3#
由于语法错误,我无法使用已接受的答案。我对答案进行了一些修改,使其对我有效。
我使用的资源是pq.Array函数文档。
fsi0uk1n4#
看看使用另一个Postgres客户端:https://github.com/vmihailenco/pg
自述文件详细介绍了阵列支持,并包括使用切片得示例.
(我自己没有用过,但看了一眼就知道了)。
dphi5xsq5#
事实上,这看起来确实是“有气质的”。下面是我会尝试的两个方法:
rows, err := db.Query("SELECT * FROM table WHERE id in ($1)", []int{1, 2, 3})
或
rows, err := db.Query("SELECT * FROM table WHERE id = ANY($1::[]int)", []int{1, 2, 3})