Mit Hilfe eines Triggers kann man festlegen, dass eine bestimmte Funktion dann aufgerufen werden soll, wenn ein bestimmtes Ereignis eintritt. Als gültige Ereignisse werden im Moment INSERT, UPDATE und DELETE unterstützt.
Um einen Trigger zu definieren, können Sie den Befehl CREATE TRIGGER verwenden:
test=# \h CREATE TRIGGER
Command: CREATE TRIGGER
Description: define a new trigger
Syntax:
CREATE TRIGGER name { BEFORE | AFTER } { event [ OR ... ] }
ON table [ FOR [ EACH ] { ROW | STATEMENT } ]
EXECUTE PROCEDURE funcname ( arguments )
Triggerfunktionen können vor oder nach einem Event gestartet werden. Es macht einen Unterschied, ob die Triggerprozedur vor oder nach einem Ereignis gestartet wird. BEFORE Trigger können noch Modifikationen an den Inputdatensätzen vornehmen.
PostgreSQL kennt zwei Arten von Triggers: Ein Row-Level Trigger startet für jede Zeile, die von einem SQL Statement betroffen ist, eine Funktion - ein DELETE Statement, das eine gesamte Tabelle löscht würde also dafür sorgen, dass die entsprechende Funktion mehrfach aufgerufen wird. Statement Level Triggers, hingegen, starten die Funktion pro ausgeführten Statement nur einmal - das besagte DELETE Statement würde eine Funktion folglich nur einmal starten.
Wir werden uns im Abschnitt zum Thema serverseitiges Programmieren noch sehr detailliert mit Triggern beschäftigen und sehen, wie Trigger in den unterschiedlichsten Programmiersprachen implementiert werden können.
Um einen Trigger wieder loszuwerden, kann DROP TRIGGER verwendet werden:
test=# \h DROP TRIGGER Command: DROP TRIGGER Description: remove a trigger Syntax: DROP TRIGGER [ IF EXISTS ] name ON table [ CASCADE | RESTRICT ]
Zukünftige Versionen von PostgreSQL werden auch Column-Level Trigger unterstützen.
Auch mit DROP TRIGGER werden wir uns noch mehr als ausführlich beschäftigen.