2017-04-05 37 views
0

我在單次運行中運行多個upsert語句。查詢可以根據數據添加或更新。是否有可能知道是否發生了新插入。將多個upsert語句的結果捕獲到Postgresql的一個輸出中

test_unique是列1和列2放在一起的唯一約束。

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; 

如果我們在上面走查詢

  • 1查詢將插入新行
  • 第二個查詢也將插入新行
  • 第三個查詢沒有做

將這些查詢作爲批處理運行時,任何客戶端庫都將捕獲上次查詢的輸出並返回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; 
相關問題