【问题标题】:How to bind array to IN condition with Node postgres如何使用 Node postgres 将数组绑定到 IN 条件
【发布时间】:2020-11-18 23:15:28
【问题描述】:

我正在努力想办法将数组绑定到节点 pg library 中的 IN 查询。

  const env = 'foo';
  const sourceTypes = ['one', 'two'];

  const resp = await pool.query(
    `SELECT source_id, target_id FROM records
    WHERE target_env = $1
    AND source_type IN ($2)`,
    [env, sourceTypes],
  );

我尝试了几种变体,它们要么出错,要么不返回任何数据。

当我手动绑定生成类似这样的东西时,我可以进行查询:

SELECT source_id, target_id FROM records
    WHERE target_env = 'foo'
    AND source_type IN ('one', 'two')

PS:如果能提供关于如何实际查看 PG 生成的 SQL 请求的建议,那将非常有帮助!

【问题讨论】:

    标签: node.js postgresql


    【解决方案1】:

    您不能一次将数组绑定到列表的多个元素。但是您可以通过将in ($2) 更改为=ANY($2) 来使用数组而不是列表

    您可以通过设置 log_statement=all 然后查看 PostgreSQL 日志文件来查看正在发送的查询。

    【讨论】:

    • 这里的例子几乎完全相同,但使用=ANY($1) 是给error: malformed array literal: "ABC123" 和参数['ABC123']。还有什么我错过的微妙之处吗?
    • 哦等等,是我……应该是双括号:查询的参数数组,ANY 参数本身是一个数组,所以在我的示例中是[['ABC123']]。现在可以享用 - 谢谢@jjanes
    猜你喜欢
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 2017-11-18
    相关资源
    最近更新 更多