【问题标题】:postgresql query fails in node.js but succeeds in pgadminpostgresql 查询在 node.js 中失败,但在 pgadmin 中成功
【发布时间】:2020-09-13 14:32:45
【问题描述】:

我有以下 postgresql 查询:

SELECT user_id, username, full_name, avatar, verified FROM users WHERE user_id IN (1,2,3)

应该选择 ID 为 1、2 或 3 的所有用户。ID 类型为 bigint。在 pgadmin 中,此查询正常工作,但使用 node-postgres,我收到以下错误:

错误:bigint 类型的输入语法无效:“1,2,3”

Node.js 代码示例:

// I have an array user_ids_array containing all user ID's
// I convert it to a string using join()
const user_ids = user_ids_array.join(',')

query = "SELECT user_id, username, full_name, avatar, verified FROM users WHERE user_id IN ($1)"

values = [user_ids]

result = await pool.query(query, values)

我猜这与 user_id (field) 是整数 (bigint) 而 user_ids 是字符串有关,但我不知道如何进行类型转换。

我找到了this question,但我也使用WHERE some_id IN (1,2) 给出了解决方案。

提前致谢!

【问题讨论】:

    标签: node.js postgresql node-postgres


    【解决方案1】:

    解决这个问题的一种方法是在你的数组中做一个 unnest。

    鉴于您当前的代码,您的 arrayids 必须是 javascript 中的默认数组(不强制转换为字符串):

    const arrayids = [1,2,3]
    
    const sql = "SELECT user_id, username, full_name, avatar, verified FROM users WHERE user_id IN (SELECT UNNEST($1::int[]))"
    
    result = await pool.query(query, [arrayids])
    

    请注意,pool.query 中的 second 参数与您当前的用例不同。

    希望对你有帮助。

    在我的项目中,我使用了 lib pg。不确定它是否适用于node-postgres

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      • 2014-11-20
      • 2013-11-20
      • 2018-10-28
      • 1970-01-01
      • 2019-07-15
      • 1970-01-01
      相关资源
      最近更新 更多