Trigger in PostgreSQL sind Datenbank-Callback-Funktionen, die als Reaktion auf bestimmte Ereignisse in einer bestimmten Tabelle oder Ansicht automatisch aufgerufen oder ausgeführt werden. Sie werden eingesetzt, um Geschäftsregeln durchzusetzen, Eingabedaten zu validieren und die Datenintegrität zu gewährleisten.
Verwendung
Trigger werden eingesetzt, wenn du eine Funktion als Reaktion auf Ereignisse wie `INSERT`, `UPDATE` oder `DELETE` in einer Tabelle automatisch ausführen lassen willst. Sie sind so definiert, dass sie vor oder nach diesen Ereignissen handeln.
sql
CREATETRIGGER trigger_name
{BEFORE|AFTER|INSTEADOF}{ event [OR...]}ON table_name
[FOR[EACH]{ROW|STATEMENT}]EXECUTEPROCEDUREfunction_name(arguments);Bereitgestellt von
In dieser Syntax richtet `CREATE TRIGGER` einen Trigger namens `Triggername` ein, der `Funktion_name` ausführt, wenn bestimmte Ereignisse in `Tabelle_name` auftreten.
Beispiele
1. Basic Insert Trigger
sql
CREATEORREPLACEFUNCTIONlog_insert()RETURNSTRIGGERAS $$
BEGININSERTINTOaudit_table(action, time)VALUES('INSERT',NOW());RETURNNEW;END;
$$ LANGUAGE plpgsql;CREATETRIGGER insert_audit
AFTERINSERTON my_table
FOREACHROWEXECUTEPROCEDURElog_insert();Bereitgestellt von
Dieser Trigger protokolliert jede Einfügeoperation in `meine_tabelle`, indem er einen Datensatz in `audit_table` hinzufügt.
2. Aktualisierungsauslöser mit bedingter Logik
sql
CREATEORREPLACEFUNCTIONcheck_update()RETURNSTRIGGERAS $$
BEGINIFNEW.amount <0THENRAISEEXCEPTION'Amount cannot be negative';ENDIF;RETURNNEW;END;
$$ LANGUAGE plpgsql;CREATETRIGGER check_update_trigger
BEFOREUPDATEON transactions
FOREACHROWEXECUTEPROCEDUREcheck_update();Bereitgestellt von
Dieser Trigger prüft, ob die Spalte "Betrag" in der Tabelle "Transaktionen" vor Aktualisierungsvorgängen nicht negativ ist.
3. Auslöser für kaskadierende Löschungen
sql
CREATEORREPLACEFUNCTIONcascade_delete()RETURNSTRIGGERAS $$
BEGINDELETEFROM child_table WHERE parent_id =OLD.id;RETURNOLD;END;
$$ LANGUAGE plpgsql;CREATETRIGGER cascading_delete_trigger
AFTERDELETEON parent_table
FOREACHROWEXECUTEPROCEDUREcascade_delete();Bereitgestellt von
Dieser Trigger stellt sicher, dass beim Löschen einer Zeile aus der "parent_table" auch die zugehörigen Zeilen in der "child_table" entfernt werden.
Tipps und bewährte Praktiken
Auslöselogik begrenzen. Halte die Triggerfunktionen einfach, um den Leistungsaufwand zu minimieren und komplexe Geschäftslogik zu vermeiden.
Verwende Trigger auf Zeilenebene selektiv. Entscheide dich wenn möglich für Trigger auf Anweisungsebene, um die Anzahl der Ausführungen zu reduzieren. Trigger auf Zeilenebene sind nützlich, wenn Operationen in jeder betroffenen Zeile durchgeführt werden müssen, während Trigger auf Anweisungsebene den Overhead reduzieren können, indem sie einmal pro Operation ausgeführt werden.
Sei vorsichtig mit rekursiven Triggern. Stelle sicher, dass sich Trigger nicht ungewollt selbst aufrufen, was zu Endlosschleifen führt.
Teste gründlich. Teste die Auslöser ausgiebig in einer Entwicklungsumgebung, um ihre Auswirkungen auf die Leistung zu beurteilen.
Dokumentauslöser. Dokumentiere den Zweck und die Logik jedes Auslösers klar und deutlich, damit du ihn später nachschlagen und pflegen kannst.
Berücksichtige die Grenzen der Transaktion. Achte auf die Transaktionsgrenzen, um sicherzustellen, dass sich die Auslöser bei Transaktionen mit mehreren Anweisungen wie erwartet verhalten.
Überwache die Leistung. Behalte die Auswirkungen von Triggern auf die Leistung in einem Live-System im Auge und diagnostiziere eventuelle Probleme mit den Logging- und Monitoring-Tools von PostgreSQL.
Auslöser verwalten
Um einen Trigger vorübergehend zu deaktivieren, verwendest du den Befehl `ALTER TABLE ... DISABLE TRIGGER` Befehl.
Um einen Trigger dauerhaft zu entfernen, verwende den Befehl `DROP TRIGGER`.
Trigger in PostgreSQL sind Datenbank-Callback-Funktionen, die als Reaktion auf bestimmte Ereignisse in einer bestimmten Tabelle oder Ansicht automatisch aufgerufen oder ausgeführt werden. Sie werden eingesetzt, um Geschäftsregeln durchzusetzen, Eingabedaten zu validieren und die Datenintegrität zu gewährleisten.
Verwendung
Trigger werden eingesetzt, wenn du eine Funktion als Reaktion auf Ereignisse wie `INSERT`, `UPDATE` oder `DELETE` in einer Tabelle automatisch ausführen lassen willst. Sie sind so definiert, dass sie vor oder nach diesen Ereignissen handeln.
In dieser Syntax richtet `CREATE TRIGGER` einen Trigger namens `Triggername` ein, der `Funktion_name` ausführt, wenn bestimmte Ereignisse in `Tabelle_name` auftreten.
Beispiele
1. Basic Insert Trigger
Dieser Trigger protokolliert jede Einfügeoperation in `meine_tabelle`, indem er einen Datensatz in `audit_table` hinzufügt.
2. Aktualisierungsauslöser mit bedingter Logik
Dieser Trigger prüft, ob die Spalte "Betrag" in der Tabelle "Transaktionen" vor Aktualisierungsvorgängen nicht negativ ist.
3. Auslöser für kaskadierende Löschungen
Dieser Trigger stellt sicher, dass beim Löschen einer Zeile aus der "parent_table" auch die zugehörigen Zeilen in der "child_table" entfernt werden.
Tipps und bewährte Praktiken
Auslöser verwalten