(2017/07/25追記)
1クエリで実現する方法を書きました。
【PostgreSQL】レコードが存在すればUPDATE、なければINSERTを1クエリで実現する
いちいちSELECTしてきて、とってきた値を検証してSQL文を生成しなおして、
これじゃ面倒なので、SQL文だけでなんとかならないか調べることに。
英語はあまり分からないですが、コードから読み解く。
UPDATE table SET field='C', field2='Z' WHERE id=3; INSERT INTO table (id, field, field2) SELECT 3, 'C', 'Z' WHERE NOT EXISTS (SELECT 1 FROM table WHERE id=3);
UPDATE文、WHERE文の式に合致するレコードが存在すればUPDATE、なければ無視。
INSERT文、NOT EXISTSでUPDATE文のWHEREと同じ条件を設定。
存在すればINSERTはされない、存在しなければINSERTが実行される。
簡単だけど、忘れがちなのでメモ。