SET CONSTRAINTSは、現在のトランザクションにおける制約の評価方法を設定します。 IMMEDIATE モードでは、一つの文の実行が終わる毎に制約がチェックされます。 DEFERRED モードでは、トランザクションが終了するまで制約はチェックされません。
制約のモードを IMMEDIATE に変更した場合は、新しい制約モードが遡及的に有効になります。 つまり (DEFERRED を使用している場合には) トランザクションの終了時にチェックされることになる未チェックのデータ変更が、代わりに SET CONSTRAINTS コマンドの実行中にチェックされます。
制約はその生成時において、常にINITIALLY DEFERRED、INITIALLY IMMEDIATE DEFERRABLE、INITIALLY IMMEDIATE NOT DEFERRABLEの三つのうちのいずれかの特性を持ちます。 三番目のものは、SET CONSTRAINTSコマンドで有効になりません。
今のところ、外部キーの制約だけがこの設定の影響を受けます。 CHECK 制約や UNIQUE 制約は、常に初期状態で直接評価され、遅延されません。