2016-01-27 2 views

答えて

5

はい、この動作はデフォルトです。唯一の制約違反があると競合が発生し、ON CONFLICT DO UPDATEが指定されている場合はUPDATEが実行されます。 INSERTステートメントには、単一のON CONFLICT句しか含めることができませんが、その句のconflict_targetには、それぞれがUNIQUEのようなインデックスを持たなければならない複数の列名を指定できます。ただし、1つのconflict_actionに限定されています。そのアクションを処理するときに競合を引き起こした制約に関する情報はありません。そのような種類の情報、または制約違反に応じた特定のアクションが必要な場合は、トリガー関数を作成する必要がありますが、INSERT ... ON CONFLICT DO ...ステートメントのすべての重要なアトミック性は失われます。

+2

私はこれが100%正しいとは確信していませんが、確かに質問はあいまいです。 2つの列が異なる固有の制約(質問から理解したもの)を持つ場合、ON CONFLICTはDO NOTHINGにしか使用できません。あなたは、いわゆるconflict_targetを連鎖したり、「分離」することはできません。 – Jeff

+0

@ジェフ私の答えを広げた。 – Patrick

+0

ありがとうございます。同じINSERTで2つの異なる違反を処理できるかどうかについて私自身の質問に答えます。 – Jeff

関連する問題