PostgreSQLでUPDATE、INSERT(UPSERT)を同時に処理させる
PostgreSQLで「あればUPDATE、なければINSERT」のUPSERTを実現する万能な方法を紹介します。
※古いバージョンのPostgreSQLで対応。
文法
UPDATE
テーブル名
SET
カラム名1 = 更新値1,
カラム名2 = 更新値2
WHERE カラム名3 = カラム名3の条件値;
INSERT INTO テーブル名 (カラム名1, カラム名2, カラム名3)
SELECT 更新値1, 更新値2, カラム名3の条件値
WHERE NOT EXISTS (SELECT 1 FROM テーブル名 WHERE カラム名3 = カラム名3の条件値)
サンプル
UPDATE
product
SET
name = '{$name}',
price = '{$price}'
WHERE id = '{$id}';
INSERT INTO product(id, name, price)
SELECT '{$id}', '{$name}', '{$price}'
WHERE NOT EXISTS (SELECT 1 FROM product WHERE id = '{$id}')
以上です。