【问题标题】:`WHERE col IN` with named parameters带有命名参数的`WHERE col IN`
【发布时间】:2018-10-27 03:52:28
【问题描述】:

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 似乎不可互换。

【问题讨论】:

  • 该示例似乎正确,因此必须关闭其他内容。您应该完全按照您的使用方式发布调用查询方法的完整示例。
  • @vitaly-t 我使用与版本一起使用的实际过滤器更新了问题。顺便说一句,漂亮的图书馆:)

标签: node.js postgresql pg-promise


【解决方案1】:

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

别名 :list 可以与 :csv 完全互换,但添加的时间比 v5.7.1 晚得多

升级到最新版本,:list 也可以使用。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-07
    • 2014-06-26
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 2011-01-10
    相关资源
    最近更新 更多