SET CONSTRAINTS

名前

SET CONSTRAINTS -- 現在のトランザクションの制約モードの設定

概要

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

説明

SET CONSTRAINTSは、現在のトランザクションにおける制約の評価方法を設定します。 IMMEDIATE モードでは、一つの文の実行が終わる毎に制約がチェックされます。 DEFERRED モードでは、トランザクションが終了するまで制約はチェックされません。

制約のモードを IMMEDIATE に変更した場合は、新しい制約モードが遡及的に有効になります。 つまり (DEFERRED を使用している場合には) トランザクションの終了時にチェックされることになる未チェックのデータ変更が、代わりに SET CONSTRAINTS コマンドの実行中にチェックされます。

制約はその生成時において、常にINITIALLY DEFERREDINITIALLY IMMEDIATE DEFERRABLEINITIALLY IMMEDIATE NOT DEFERRABLEの三つのうちのいずれかの特性を持ちます。 三番目のものは、SET CONSTRAINTSコマンドで有効になりません。

今のところ、外部キーの制約だけがこの設定の影響を受けます。 CHECK 制約や UNIQUE 制約は、常に初期状態で直接評価され、遅延されません。

注釈

このコマンドは、現在のトランザクション内のみの制約の動作に影響します。 したがって、トランザクションブロック(BEGIN/COMMIT の間)の外部でこのコマンドを実行した場合、全く影響を与えません。 トランザクション毎に SET CONSTRAINTS コマンドの実行をすることなく、制約の動作を変更したい場合は、制約を生成する時にINITIALLY DEFERRED あるいは INITIALLY IMMEDIATEを指定してください。

互換性

このコマンドは、標準SQLで定義された動作に準拠しています。 ただし、PostgreSQLでは外部キー制約にのみ適用できるという制限があります。