PostgreSQL9.5のupsertのON CONFLICT DO NOTHINGの動作確認

PostgreSQL9.5のupsertのON CONFLICT DO NOTHINGの動作確認

PostgreSQL9.5から追加されたupsertでon conflict do nothingをつけて、既にデータがあればインサートにいかないような動きを期待していたのですが、どんどん同じデータがインサートされていったので動作を調べてみました。

こんな感じでインサート文を書くと既にデータがある場合はインサートされずにエラーも出ずに何もなかった感じの動作になりました。但しこれは制約(主キー)があるテーブルの場合で、制約がないテーブルの場合はどんどん同一データがインサートされていくという動きのようです。

ON CONFLICT ON CONSTRAINT 制約名

ON CONFLICT ON CONSTRAINT 制約名でマージ文を発行することが出来ます。

ON CONFLICT ON CONSTRAINT 制約名で制約名が指定できますが、インデックス名は指定できません。

ID(主キー)がサロゲートキーのケース

としてIDが既に存在する場合、アップデートすることが出来ますが、IDがサロゲートキーでシーケンスオブジェクトを使用している場合、VALUES句にIDを省略することが出来ますが、IDを省略した場合、NEXTVALが実行されアップデートが実行されません。(常にインサート)

公式サイトわかりづらいです。

参考サイト

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA