问题描述
我正在尝试编写一个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"}
我也尝试取出ARRAY
和TEXT
部分(因此,上面的查询中的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[])
应该就足够了。