Go中的Postgres列表参数(使用database/sql和pq)

jos*_*hlf 2 sql postgresql prepared-statement go query-parameters

我正在尝试编写一个带有list参数的查询(即一个参数,它是一个值列表).看来这在Postgres中至少有时是可能的(/sf/answers/758083231/).我想要的是这样的:

rows, err := db.Query("SELECT * FROM table WHERE id in $1", []int{1, 2, 3})
Run Code Online (Sandbox Code Playgroud)

但是,当我使用pq驱动程序执行此操作时,出现错误:

sql: converting Exec argument #0's type: unsupported type []int, a slice
Run Code Online (Sandbox Code Playgroud)

这根本就不支持了pq,或者根本没有支持,或者根本不支持database/sqlPostgres,或者什么?谢谢!

jos*_*hlf 6

所以看起来pq使用的是数据库/ sql的默认ValueConverter,它无法处理切片(参见DefaultParameterConverter 的文档).


小智 6

现在你可以使用带有切片参数的pq.Array。所以查询看起来像:

rows, err := db.Query("SELECT * FROM table WHERE id in $1", pq.Array([]int{1, 2, 3}))
Run Code Online (Sandbox Code Playgroud)