Postgres如果不存在则插入多行,如果存在或插入则返回所有id,然后使用所有id插入另一个表

时间:2021-07-27 21:25:53

标签: sql postgresql

我在节点服务器中有一个字符串数组。我想将每个字符串作为标签插入 table1。每个标签行有tag_id和tag_text,其中tag_id为序列值,tag_text为对应的字符串。

如果这些标签不存在,我想插入它们,并返回所有标签的 id,无论每个标签是否已插入或已存在。是否可以在单个查询中执行此操作?

此外,我想使用从上面的查询返回的 id,并将每个 id 与一个常量值(在节点服务器中定义)一起插入另一个表(table2)中。是否有可能在单个事务中完成所有这些操作?如果是这样,如何?

1 个答案:

答案 0 :(得分:0)

您可以使用返回子句:

insert into table1 (tag)
    select tag
    from unnest($tag_array) tag
    on conflict (tag)
    do update set tag = excluded.tag
    returning (*);

这应该返回所有标签,无论它们是否在表格中。

相关问题