如何實現(xiàn)UPSERT(合并,插入…)關(guān)于重復(fù)更新)在PostgreSQL中?這里一個經(jīng)常被問到的問題是如何重新插入,這就是MySQL所稱的。INSERT ... ON DUPLICATE UPDATE和標(biāo)準(zhǔn)支持作為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');現(xiàn)在假設(shè)您想要“插入”元組。(2, 'Joe'), (3, 'Alan'),因此新的表內(nèi)容將是:(1, 'fred'),(2, 'Joe'), -- Changed value of existing tuple(3, 'Alan') -- Added new tuple這就是人們在討論upsert。至關(guān)重要的是,任何方法都必須是在同一個表中存在多個事務(wù)時安全-使用顯式鎖定,或以其他方式抵抗由此產(chǎn)生的競爭條件。本主題在插入,在PostgreSQL中的重復(fù)更新?,但這是MySQL語法的替代品,而且隨著時間的推移,它已經(jīng)有了一些不相關(guān)的細(xì)節(jié)。我正在研究明確的答案。這些技術(shù)也適用于“如果不存在插入,否則什么也不做”,即“在重復(fù)鍵忽略時插入.”。
如何實現(xiàn)UPSERT(合并,插入…)關(guān)于重復(fù)更新)在PostgreSQL中?
躍然一笑
2019-05-30 17:49:45