如何實現UPSERT(合并,插入…)關于重復更新)在PostgreSQL中?這里一個經常被問到的問題是如何重新插入,這就是MySQL所稱的。INSERT ... ON DUPLICATE UPDATE和標準支持作為MERGE行動。考慮到PostgreSQL不直接支持它(在PG9.5之前),您如何做到這一點?考慮以下幾點:CREATE TABLE testtable (
id integer PRIMARY KEY,
somedata text NOT NULL);INSERT INTO testtable (id, somedata) VALUES(1, 'fred'),(2, 'bob');現在假設您想要“插入”元組。(2, 'Joe'), (3, 'Alan'),因此新的表內容將是:(1, 'fred'),(2, 'Joe'), -- Changed value of existing tuple(3, 'Alan') -- Added new tuple這就是人們在討論upsert。至關重要的是,任何方法都必須是在同一個表中存在多個事務時安全-使用顯式鎖定,或以其他方式抵抗由此產生的競爭條件。本主題在插入,在PostgreSQL中的重復更新?,但這是MySQL語法的替代品,而且隨著時間的推移,它已經有了一些不相關的細節。我正在研究明確的答案。這些技術也適用于“如果不存在插入,否則什么也不做”,即“在重復鍵忽略時插入.”。
如何實現UPSERT(合并,插入…)關于重復更新)在PostgreSQL中?
躍然一笑
2019-05-30 17:49:45