带有命名参数的{WHERE col IN`

时间:2018-05-17 01:09:36

标签: node.js postgresql pg-promise

在有关如何使用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获得无效的语法错误。这支持吗?或者我是否必须将参数作为数组传递并像示例一样引用它们?

版本:

  • Postgres:9.5.7
  • pg-promise:5.7.1

更新 我将我的参数更改为... WHERE widget IN ($(ids:csv))...并且现在可以正常工作了,所以似乎:list:csv 可以互换。

1 个答案:

答案 0 :(得分:1)

问题是你使用的是pg-promise的古老版本。当前版本是8.4.4,您使用的是5.7.1

别名:list可与:csv完全互换,但它的添加时间远远早于v5.7.1

升级到最新版本,它也适用于:list

还假设当前文档中的所有内容都相应地引用了当前版本的库。