SET CONSTRAINTS

Name

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

Synopsis

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

説明

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

Note: このコマンドは、現行トランザクション内での制約の振る舞いを変更するだけです。 このようにすると、このコマンドを明示的なトランザクションブロック (例えば BEGIN で始まるブロック) の外側で実行する場合に、何も影響がないように見えます。 トランザクション毎に SET CONSTRAINTS コマンドを発行せずに制約を変更したい場合には、制約を作成する際に INITIALLY DEFERRED または INITIALLY IMMEDIATE を指定します。

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

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

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

互換性

SQL92, SQL99

SET CONSTRAINTSSQL92SQL99 で定義されています。 PostgreSQL での実装は、PostgreSQL の制限により SET CONSTRAINTS を check 制約および unique 制約に適用することができない点を除き標準の定義に準拠しています。