PostgreSQLでUPSERT(マージ、挿入…重複更新時)する方法
ここで非常によく寄せられる質問は、MySQLが呼び出しINSERT ... ON DUPLICATE UPDATE、標準がMERGE操作の一部としてサポートする、アップサートの実行方法です。 PostgreSQLがそれを直接サポートしていないことを考えると(pg 9.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です。重要なのは、明示的なロックを使用するか、結果として生じる競合状態から防御することによって、同じテーブルで作業する複数のトランザクションが存在する場合でも、どのようなアプローチも安全でなければならないことです。 …