在有关如何使用parameterized queries with an IN clause的示例中,语法如下:
const data = [1, 'two', 3, 'four'];
db.any('SELECT * FROM table WHERE id IN ($1:csv)', [data])
.then(data => {
...
我似乎无法使其适用于命名参数:
db.manyOrNone('SELECT widget FROM widgets WHERE id IN ($(ids:list))',
{ ids: [1, 2, 3] })
(我正在使用:list
,因为它似乎是interchangeable :csv
)。
我尝试了各种组合,如:
($(ids):list)
(语法错误位于或附近“:”)(${ids:list})
(语法错误在“$”或附近)我一直从Postgres获得无效的语法错误。这支持吗?或者我是否必须将参数作为数组传递并像示例一样引用它们?
版本:
更新
我将我的参数更改为... WHERE widget IN ($(ids:csv))...
并且现在可以正常工作了,所以似乎:list
和:csv
不可以互换。
答案 0 :(得分:1)
问题是你使用的是pg-promise的古老版本。当前版本是8.4.4,您使用的是5.7.1
别名:list
可与:csv
完全互换,但它的添加时间远远早于v5.7.1
升级到最新版本,它也适用于:list
。
还假设当前文档中的所有内容都相应地引用了当前版本的库。