PostgresはINSERT OR REPLACE
に相当するものを実装していません 。 ON CONFLICT
から ドキュメント(私の強調):
DO NOTHING、または正確な詳細を指定するDOUPDATE句のいずれかです。 競合が発生した場合に実行されるUPDATEアクションの例。
交換の省略形はありませんが、ON CONFLICT DO UPDATE
既存のデータに基づいて新しい値を設定できるため、より一般的に適用されます。例:
INSERT INTO users (id, level)
VALUES (1, 0)
ON CONFLICT (id) DO UPDATE
SET level = users.level + 1;