【问题标题】:NodeJS–Add Array of String in PostgreSQL QueryNodeJS——在 PostgreSQL 查询中添加字符串数组
【发布时间】:2020-12-19 05:15:24
【问题描述】:

我正在尝试编写一个 postgres 查询(在 nodejs 中使用使用 node-postgres 包创建的池执行),它将在表中插入一个新行。此表中的一列是text[] 类型。我的代码如下:

pool.query('INSERT INTO paragraphs (lines) VALUES (ARRAY[$1]::TEXT[]) RETURNING id', [my_array], (err, results) => {
            if (err) {
              reject(err)
              return;
            }
            
            resolve(results.rows[0].id)
})

paragraphs 是我的表的名称,linestext[] 类型的列的名称。 my_array 是一个字符串列表。我的问题是插入的不是字符串数组,而是像数组一样格式化的单个字符串。例如:

{"[\"First line\", \"Second line\", \"Third Line\"]"}

我希望它是:

{"First line", "Second line", "Third Line"}

我也试过取出ARRAYTEXT 部分(所以上面查询中的sql 看起来像INSERT INTO paragraphs (lines) VALUES ($1) RETURNING id),但后来我收到错误:

malformed array literal: "["New First line", "Second line", "Third Line"]"
DETAIL:  "[" must introduce explicitly-specified array dimensions.

通过池执行的查询将字符串列表插入nodejs中的PostgreSQL表的正确方法是什么?

【问题讨论】:

    标签: node.js arrays postgresql sql-insert node-postgres


    【解决方案1】:

    根据:https://node-postgres.com/features/queries#parameterized-query

    作为第二个参数传递给 query() 的参数将使用以下规则转换为原始数据类型: ...

    数组

    转换为描述 Postgres 数组的字符串。每个数组项都使用此处描述的规则进行递归转换。

    所以:

    VALUES ($1)VALUES ($1::TEXT[])应该就足够了。

    【讨论】:

    • 我最初尝试过。事实证明,我试图用作参数的数组实际上只是一个字符串(我使用的是 body-parser,由于某种原因,它没有解析我的帖子正文中的数组并将其保留为字符串)。解决此问题并使用您的方法有效!
    猜你喜欢
    • 2019-07-28
    • 1970-01-01
    • 2017-04-21
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    相关资源
    最近更新 更多