首页 > 解决方案 > NodeJS——在 PostgreSQL 查询中添加字符串数组

问题描述

我正在尝试编写一个 postgres 查询(使用使用 node-postgres 包创建的池在 nodejs 中执行),它将在表中插入一个新行。此表中的一列是类型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是我的表的名称,并且lines是类型列的名称text[]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.jsarrayspostgresqlsql-insertnode-postgres

解决方案


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

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

大批

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

所以:

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


推荐阅读