SET CONSTRAINTS

Name

SET CONSTRAINTS -- setzt den Constraint-Modus der aktuellen Transaktion

Synopsis

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

Beschreibung

SET CONSTRAINTS stellt die Auswertung von Constraints in der aktuellen Transaktion ein. Im Modus IMMEDIATE (unmittelbar) werden Constraints am Ende jedes Befehls geprüft. Im Modus DEFERRED (verschoben) werden Constraints erst am Ende der Transaktion geprüft.

Wenn Sie den Modus eines Constraints auf IMMEDIATE setzen, dann tritt der Modus rückwirkend in Kraft: Alle Datenveränderungen, die erst am Ende der Transaktion geprüft worden wären (Modus DEFERRED), werden stattdessen bei der Ausführung des Befehls SET CONSTRAINTS geprüft.

Bei der Erzeugung erhält ein Constraint immer eine von drei möglichen Eigenschaften: INITIALLY DEFERRED (d.h. er wird in der Standardeinstellung am Ende der Transaktion geprüft), INITIALLY IMMEDIATE DEFERRABLE (d.h. er wird in der Standardeinstellung am Ende jedes Befehls geprüft, die Prüfung kann aber an das Ende der Transaktion verschoben werden) oder INITIALLY IMMEDIATE NOT DEFERRABLE (d.h. er wird in der Standardeinstellung am Ende jedes Befehls geprüft und kann nicht verschoben werden). Auf die dritte Gruppe hat der Befehl SET CONSTRAINTS keine Auswirkung.

Gegenwärtig werden nur Fremdschlüssel-Constraints von dieser Einstellung beeinflusst. Check- und Unique Constraints werden immer nach jedem Befehl geprüft.

Hinweise

Dieser Befehl ändert das Verhalten von Constraints in der aktuellen Transaktion. Wenn Sie den Befehl also außerhalb eines Transaktionsblocks (BEGIN/COMMIT-Paar) ausführen, dann hat er keine erkennbare Auswirkung. Wenn Sie das Verhalten eines Constraints ändern wollen, ohne in jeder Transaktion SET CONSTRAINTS ausführen zu müssen, geben Sie bei der Erzeugung des Constraints INITIALLY DEFERRED oder INITIALLY IMMEDIATE an.

Kompatibilität

Dieser Befehl ist mit dem im SQL-Standard definierten Verhalten konform, außer dass er in PostgreSQL nur für Fremdschlüssel-Constraints gilt.