PostgreSQL-Trigger sind Datenbank-Callback-Funktionen, die automatisch ausgeführt oder "getriggert" werden, wenn ein bestimmtes Datenbankereignis eintritt, z.B. ein `INSERT`, `UPDATE`, `DELETE` oder `TRUNCATE`. Diese werden verwendet, um die Datenintegrität aufrechtzuerhalten, Geschäftsregeln durchzusetzen oder die Protokollierung und Prüfung durchzuführen.
Verwendung
Auslöser werden verwendet, wenn du Aufgaben als Reaktion auf Änderungen in den Daten einer Tabelle automatisieren musst. Sie sind besonders nützlich, um die Konsistenz zu wahren und komplexe Geschäftslogik auf Datenbankebene zu implementieren.
sql
CREATETRIGGER trigger_name
{BEFORE|AFTER|INSTEADOF}{INSERT|UPDATE|DELETE|TRUNCATE}ON table_name
[FOREACHROW|FOREACHSTATEMENT]EXECUTEPROCEDUREfunction_name();Bereitgestellt von
In dieser Syntax definiert `CREATE TRIGGER` einen neuen Trigger mit dem Namen `trigger_name` und gibt an, wann er ausgelöst werden soll (`BEFORE`, `AFTER` oder `INSTEAD OF`), welches Ereignis ihn auslösen soll (`INSERT`, `UPDATE`, `DELETE` oder `TRUNCATE`) und für welche Tabelle er gilt (`ON table_name`). EXECUTE PROCEDURE" ruft die Funktion auf, die die Triggerlogik enthält.
Beispiele
1. Grundlegender Auslöser beim Einfügen
sql
CREATEORREPLACEFUNCTIONlog_insert()RETURNSTRIGGERAS $$
BEGININSERTINTOlog_table(action, timestamp)VALUES('INSERT',NOW());RETURNNEW;END;
$$ LANGUAGE plpgsql;CREATETRIGGER insert_trigger
AFTERINSERTON main_table
FOREACHROWEXECUTEPROCEDURElog_insert();Bereitgestellt von
In diesem Beispiel wird ein Trigger erstellt, der jedes Mal einen Eintrag in `log_table` protokolliert, wenn eine neue Zeile in `main_table` eingefügt wird.
2. Auslöser zur Durchsetzung der Geschäftsregel
sql
CREATEORREPLACEFUNCTIONcheck_salary()RETURNSTRIGGERAS $$
BEGINIFNEW.salary <1000THENRAISEEXCEPTION'Salary cannot be less than 1000';ENDIF;RETURNNEW;END;
$$ LANGUAGE plpgsql;CREATETRIGGER salary_check
BEFOREINSERTORUPDATEON employees
FOREACHROWEXECUTEPROCEDUREcheck_salary();Bereitgestellt von
Hier sorgt ein Trigger dafür, dass das Gehalt eines Mitarbeiters nicht unter 1000 gesetzt wird, weder beim Einfügen noch beim Aktualisieren.
3. Auslöser für Audit Logging
sql
CREATEORREPLACEFUNCTIONaudit_changes()RETURNSTRIGGERAS $$
BEGINIFTG_OP='UPDATE'THENINSERTINTOaudit_log(table_name, operation, old_data, new_data, changed_at)VALUES(TG_TABLE_NAME,TG_OP,ROW(OLD.*),ROW(NEW.*),NOW());ENDIF;RETURNNEW;END;
$$ LANGUAGE plpgsql;CREATETRIGGER audit_trigger
AFTERUPDATEON any_table
FOREACHROWEXECUTEPROCEDUREaudit_changes();Bereitgestellt von
In diesem Beispiel werden Änderungen in `irgendeiner_Tabelle` erfasst, indem nach jeder Aktualisierung sowohl die alten als auch die neuen Zeilendaten in einer `audit_log` Tabelle aufgezeichnet werden.
Auslöser verwalten
Um einen Auslöser zu deaktivieren:
sql
ALTERTABLE table_name DISABLETRIGGER trigger_name;Bereitgestellt von
Halte die Auslöser einfach und effizient. Komplexe Logik kann den Datenbankbetrieb verlangsamen. Achte auf die Auswirkungen auf die Leistung, besonders in Umgebungen mit vielen Transaktionen.
Verwende Auslöser für kritische Beschränkungen. Stelle sicher, dass wichtige Geschäftsregeln auf der Datenbankebene durchgesetzt werden.
Begrenze die Nebenwirkungen. Trigger sollten es vermeiden, den Zustand der Datenbank auf unerwartete Weise zu verändern.
Dokumentauslöser. Erstelle eine klare Dokumentation für jeden Trigger, damit zukünftige Entwickler seinen Zweck verstehen.
Teste gründlich. Stelle sicher, dass die Auslöser wie erwartet funktionieren, indem du sie in verschiedenen Szenarien und Randfällen testest.
Achte auf die Reihenfolge der Ausführung. Verstehe die Ausführungsreihenfolge, wenn mehrere Auslöser für dasselbe Ereignis in einer Tabelle definiert sind.
Behandle rekursive Aufrufe. Sei dir möglicher rekursiver Auslöseraufrufe bewusst und setze, wo nötig, Schutzmaßnahmen ein.
PostgreSQL-Trigger sind Datenbank-Callback-Funktionen, die automatisch ausgeführt oder "getriggert" werden, wenn ein bestimmtes Datenbankereignis eintritt, z.B. ein `INSERT`, `UPDATE`, `DELETE` oder `TRUNCATE`. Diese werden verwendet, um die Datenintegrität aufrechtzuerhalten, Geschäftsregeln durchzusetzen oder die Protokollierung und Prüfung durchzuführen.
Verwendung
Auslöser werden verwendet, wenn du Aufgaben als Reaktion auf Änderungen in den Daten einer Tabelle automatisieren musst. Sie sind besonders nützlich, um die Konsistenz zu wahren und komplexe Geschäftslogik auf Datenbankebene zu implementieren.
In dieser Syntax definiert `CREATE TRIGGER` einen neuen Trigger mit dem Namen `trigger_name` und gibt an, wann er ausgelöst werden soll (`BEFORE`, `AFTER` oder `INSTEAD OF`), welches Ereignis ihn auslösen soll (`INSERT`, `UPDATE`, `DELETE` oder `TRUNCATE`) und für welche Tabelle er gilt (`ON table_name`). EXECUTE PROCEDURE" ruft die Funktion auf, die die Triggerlogik enthält.
Beispiele
1. Grundlegender Auslöser beim Einfügen
In diesem Beispiel wird ein Trigger erstellt, der jedes Mal einen Eintrag in `log_table` protokolliert, wenn eine neue Zeile in `main_table` eingefügt wird.
2. Auslöser zur Durchsetzung der Geschäftsregel
Hier sorgt ein Trigger dafür, dass das Gehalt eines Mitarbeiters nicht unter 1000 gesetzt wird, weder beim Einfügen noch beim Aktualisieren.
3. Auslöser für Audit Logging
In diesem Beispiel werden Änderungen in `irgendeiner_Tabelle` erfasst, indem nach jeder Aktualisierung sowohl die alten als auch die neuen Zeilendaten in einer `audit_log` Tabelle aufgezeichnet werden.
Auslöser verwalten
Um einen Auslöser zu deaktivieren:
Um einen Auslöser zu aktivieren:
Um einen Auslöser zu löschen:
Tipps und bewährte Praktiken