如何在一张表中插入多个对象?

问题描述

一个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);

用于插入的数据如下所示:

  1. 标签数组,如 ['mytag1','mytag2,...];
  2. 标签相关的实体的
  3. id(例如帖子)。

我可以将它们组合成对象数组( [{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[];