テーブル内の2つのカラムのいずれかで競合が発生した場合、Postgres 9.5でupsert
を実行することはできますか?基本的には2つの列があり、いずれかの列が一意の制約違反をスローすると、更新操作を実行したいと思います。2列のうちの1つで競合が発生した場合、Postgresでアップセットする方法はありますか?
8
A
答えて
5
はい、この動作はデフォルトです。唯一の制約違反があると競合が発生し、ON CONFLICT DO UPDATE
が指定されている場合はUPDATE
が実行されます。 INSERT
ステートメントには、単一のON CONFLICT
句しか含めることができませんが、その句のconflict_target
には、それぞれがUNIQUE
のようなインデックスを持たなければならない複数の列名を指定できます。ただし、1つのconflict_action
に限定されています。そのアクションを処理するときに競合を引き起こした制約に関する情報はありません。そのような種類の情報、または制約違反に応じた特定のアクションが必要な場合は、トリガー関数を作成する必要がありますが、INSERT ... ON CONFLICT DO ...
ステートメントのすべての重要なアトミック性は失われます。
関連する問題
- 1. 2つのカラムのうちの1つのカラムで競合が発生した場合、Postgresでアップセットできますか?
- 2. ストーリーボードで競合が発生した場合、Xcodeがクラッシュする
- 3. 2つのJavaScriptの間で競合が発生する
- 4. Subversion:競合が発生した場合に更新が失敗しますか?
- 5. 競合が発生した場合にマージを成功させる方法
- 6. なぜマージ競合が発生するのですか? I場合
- 7. 括弧のためにLALR(1)の競合が発生する
- 8. 1つのWebリクエストで2つのAutofacコンテナが競合する
- 9. 400の不正なリクエストエラーが発生した場合でも、サーバーレスポンスをキャッチする方法はありますか?
- 10. Pythonで名前の競合が発生した場合、コマンドラインから2つの異なるオブジェクトの引数を取得する方法argparse
- 11. GITで競合が発生するWord
- 12. 3つのテーブルを結合する方法があります。どちらも「メイン」ではない場合
- 13. py.test assertが発生する可能性があり、発生した場合は__
- 14. Git:リモートトラッキングブランチで変更が発生した場合、ローカルブランチを自動更新する方法はありますか?
- 15. 同じサーバー上の2つのLaravelプロジェクトで競合が発生する
- 16. postgresテーブルに2つの列で結合しますか?
- 17. 値が1.01〜1の場合の丸め方法、1.1の場合はpostgresqlの場合は2ですか? postgresので
- 18. アセンブラで構文エラーが発生した場合はどうなりますか?
- 19. jqueryのドロップイベントが発生しない場合があります
- 20. Postgres EFプロバイダとの結合でNullReferenceExceptionが発生しました
- 21. 2つのテーブルに一致するものがある場合とそうでない場合のデータを取得する方法はありますか?
- 22. ぼかしと入力の競合が発生しました
- 23. 2つのテーブルはインデックスがあり、同じ列名を持ち、異なる情報を含んでいます...競合がありますか?
- 24. 2つの行の値が異なる場合、DataFrameの列/系列内の2つの行をマージ/結合する方法はありますか?
- 25. PostgreSQL - 値が2つの列のうちの1つにある場合のGROUP BY条件
- 26. 分離する方法1つの列から2つの場合
- 27. コードで競合状態が発生しますか?
- 28. EventMachineで競合状態が発生していますか?
- 29. 2つのテーブルを結合し、テーブルの1つのフィールドでグループ化する方法はありますか?
- 30. アクセスクエリで、2つの値が1つの列に存在する場合は1つを省略します。
私はこれが100%正しいとは確信していませんが、確かに質問はあいまいです。 2つの列が異なる固有の制約(質問から理解したもの)を持つ場合、ON CONFLICTはDO NOTHINGにしか使用できません。あなたは、いわゆるconflict_targetを連鎖したり、「分離」することはできません。 – Jeff
@ジェフ私の答えを広げた。 – Patrick
ありがとうございます。同じINSERTで2つの異なる違反を処理できるかどうかについて私自身の質問に答えます。 – Jeff