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是字符串列表。我的问题是,插入的不是字符串数组,而是格式化为数组的单个字符串。 e.x。:

{"[\"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","Third Line"]"
DETAIL:  "[" must introduce explicitly-specified array dimensions.

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

解决方法

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

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

数组

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

所以:

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...