问题描述
有一个表 entityLinks,我想通过一个查询插入多个值。 该表是使用以下查询定义的:
CREATE TABLE entityLinks(
id INTEGER NOT NULL references posts(id) ON DELETE CASCADE,tag VARCHAR(255) NOT NULL references tags(tag) ON DELETE CASCADE);
用于插入的数据如下所示:
我可以将它们组合成对象数组( [{id: 1,tag: 'mytag1'},{id:1,tag: 'mytag2'},... ] )如果需要。此查询中的所有标签的 ID 都相同,但每个查询都不同。
我知道如何插入多个标签
INSERT INTO tags(tag)
SELECT * FROM unnest($1::text[])
($1 - 是一个变量,作为这样的值传递 this.pool.query(query,[tags]) );
...但是当我尝试相同时,unnest
已经取消了所有级别的排列 ([ [1,'mytag1'],[1,'mytag2'],... ] => "1,' mytag1',1,'mytag2',... ".
错误是:错误:格式错误的记录文字:“1”(1 - 是 id)
我尝试使用对象数组,但收到此错误:格式错误的记录文字:"{"id":179,"tag":"mytag1"}"
基本上,我想插入与相同 id 链接的不同标签(一个查询相同),但也有兴趣了解如何一次插入多个对象(将来可能会有用)。
>提前致谢!
解决方法
这是你想要的吗?
INSERT INTO entitlyLinks (id,tag)
SELECT 1,tag
FROM unnest($1::text[]) t(tag);
注意:我建议调用 id
post_id
,这样它所指的内容就很清楚了。
在 @Gordon Linoff 的帮助下,我编写了正确的查询
INSERT INTO entityLinks(post_id,tag)
SELECT $1,tag
FROM unnest($2::text[]) as tag;
也许将来会对某人有用。 数据是这样传递的:
this.pool.query(queries.addLinks,[post_id,tags]);
post_id: number,tags: string[];