現在のトランザクションの制約チェックモードを設定します。

構文

SET CONSTRAINTS { ALL | name [, ...] } { DEFERRED | IMMEDIATE }

説明

SET CONSTRAINTS コマンドは、現在のトランザクションの制約チェック動作を設定します。 IMMEDIATE 制約は、各文の最後にチェックされます。 DEFERRED 制約は、トランザクションがコミットされた後にのみチェックされます。 各制約には独自の IMMEDIATE または DEFERRED モードがあります。

制約が作成されると、DEFERRABLE INITIALLY DEFERREDDEFERRABLE INITIALLY IMMEDIATE、または NOT DEFERRABLE のいずれかの特性が制約に割り当てられます。 3 番目のクラスは常に IMMEDIATE で、これは SET CONSTRAINTS コマンドの影響を受けません。 最初の 2 つのクラスは、指定されたモードで各トランザクションを開始します。 トランザクションの最初の 2 つのクラスの動作を変更する場合、SET CONSTRAINTS コマンドを使用します。

制約名リストを指定すると、 SET CONSTRAINTS コマンドは、指定された制約モードを変更します。 指定された制約は延期可能である必要があります。 指定された名前と一致する制約が複数ある場合、一致するすべての制約モードが変更されます。 SET CONSTRAINTS ALL コマンドは、すべての延期可能な制約モードを変更します。

SET CONSTRAINTS コマンドが制約モードを DEFERRED から IMMEDIATE に変更すると、新しいモードには遡及効果ができます。 SET CONSTRAINTS コマンドの実行中、未完了のデータ変更は全てチェックされます。 トランザクションの終了時には、これらのデータ変更はそれ以上チェックされなくなります。 制約に違反すると、 SET CONSTRAINTS コマンドは失敗し、制約モードは変更されません。 したがって、SET CONSTRAINTS コマンドを使用して、トランザクションの特定のポイントで制約を強制的にチェックすることができます。

制約チェックモードの設定は、外部キー制約にのみ有効です。 Check および UNIQUE 制約の延期は不可能です。

このコマンドは、現在のトランザクション内に限り、制約の動作を変更します。 このコマンドをトランザクションブロック外で実行した場合、コマンドは無効となります。