带有命名参数的“WHERE col IN”
`WHERE col IN` with named parameters
在如何使用parameterized queries with an IN clause的例子中,语法如下:
const data = [1, 'two', 3, 'four'];
db.any('SELECT * FROM table WHERE id IN (: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
似乎 不能 可以互换。
问题是您使用的是 pg-promise 的旧版本。当前版本为8.4.4,您使用的是5.7.1
Alias :list
可与 :csv
完全互换,但添加时间比 v5.7.1
晚得多
升级到最新版本,:list
也可以使用。
同时假设当前文档中的所有内容都相应地引用了库的当前版本。
在如何使用parameterized queries with an IN clause的例子中,语法如下:
const data = [1, 'two', 3, 'four'];
db.any('SELECT * FROM table WHERE id IN (: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
似乎 不能 可以互换。
问题是您使用的是 pg-promise 的旧版本。当前版本为8.4.4,您使用的是5.7.1
Alias :list
可与 :csv
完全互换,但添加时间比 v5.7.1
升级到最新版本,:list
也可以使用。
同时假设当前文档中的所有内容都相应地引用了库的当前版本。