2017-10-15 166 views
-1

我有以下查詢,現在一個成功插入Postgresql upsert在衝突時返回ID?

INSERT INTO match (match_id) values(?) ON CONFLICT DO NOTHING RETURNING id 

我怎樣才能讓這個返回已經存在衝突行的id後返回的ID?

回答

1

使用ON CONFLICT DO UPDATE而不是確保查詢某行工作,因此可以返回的東西:

CREATE TABLE match(id serial PRIMARY KEY); 

INSERT INTO match (id) VALUES (1) 
ON CONFLICT (id) DO UPDATE 
    SET id = excluded.id 
RETURNING id; 
+0

我得到以下錯誤「org.postgresql.util.PSQLException:錯誤:衝突DO更新需要推理規範或約束名稱 提示:例如,ON CONFLICT(column_name)。 Position:41「 – Arya

+0

另外我想提一下,它是'match_id',我正在設置,並且我想'id'返回 – Arya

+0

我的不好,你必須指定什麼是衝突 - 我已編輯。儘管除非'id'基於'match_id',我可以指定你要更新和返回的內容,但我不知道如何在沒有在插入中明確指定衝突的情況下觸發衝突。 – dmfay