将多个 upsert 语句的结果捕获到 Postgresql 的一个输出中

Capture the result of multiple upsert statement into one output for Postgresql

我运行在单个 运行 中加入多个更新插入语句。可以根据数据添加或更新查询。有可能知道是否发生了新的插入。

test_unique是column1和column2放在一起的唯一约束。

insert into test(column1,column2) values(1,1) ON CONFLICT ON CONSTRAINT test_unique DO NOTHING;
insert into test(column1,column2) values(1,2) ON CONFLICT ON CONSTRAINT test_unique DO NOTHING;
insert into test(column1,column2) values(1,1) ON CONFLICT ON CONSTRAINT test_unique DO NOTHING;

如果我们进行上述查询

当 运行 将这些查询作为批处理时,任何客户端库都将捕获最后一个查询的输出,并将 return 0 行。

有没有办法知道即使是单个插入而不考虑它在查询中的位置?

谢谢

您可以使用 returning:

with i1 as (
      insert into test(column1,column2) values(1,1)
          ON CONFLICT ON CONSTRAINT test_unique DO NOTHING
          returning *
     ),
     i2 as (
      insert into test(column1,column2) values(1,2)
          ON CONFLICT ON CONSTRAINT test_unique DO NOTHING
          returning *
     ),
     i3 as (
      insert into test(column1,column2) values(1,1)
          ON CONFLICT ON CONSTRAINT test_unique DO NOTHING
          returning *
    )
select id from i1 union all
select id from i2 union all
select id from i3;