KDOC 581: アトミックなupsertを実行する
この文書のステータス
- 作成
- 2026-06-28 貴島
- レビュー
- 2026-06-28 貴島
概要
DBレベルのアトミックな upsert は、PostgreSQLでは ON CONFLICT を用いてこのように書く。
INSERT INTO users (email, name) VALUES ('user@example.com', 'admin') ON CONFLICT (email) DO UPDATE SET name = 'admin';
2クエリ SELECT + (INSERT or UPDATE) にするなどでアトミックでなくなると、同時に実行したときに両方とも INSERT してしまうことになり安全ではない。
ORMにあるような upsert はこのクエリを発行することが多いが、同じテーブル限定などの使用条件があり、2クエリにフォールバックするときがある。
関連
なし。