我在一次运行中运行多个upsert语句。可以根据数据添加或更新查询。是否可以知道是否发生了新插入。
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;
如果我们采取上述查询
以批处理方式运行这些查询时,任何客户端库都将捕获上一个查询的输出,并返回0行。
有没有办法知道一个插入,无论它在查询中的位置如何?
由于
答案 0 :(得分:2)
您可以使用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;