Trigger in PostgreSQL sind spezielle Prozeduren, die automatisch ausgeführt oder abgefeuert werden, wenn bestimmte Ereignisse in einer Datenbanktabelle auftreten. Trigger auf Anweisungsebene werden einmal pro SQL-Anweisung ausgeführt, unabhängig von der Anzahl der Zeilen, die von der Anweisung betroffen sind.
Verwendung Trigger auf Anweisungsebene werden verwendet, um Geschäftsregeln durchzusetzen, Eingaben zu überprüfen oder Prüfprotokolle zu führen, wenn eine Anweisung eine beliebige Anzahl von Zeilen betrifft. Sie sind so definiert, dass sie vor oder nach den Operationen `INSERT`, `UPDATE` oder `DELETE` in einer Tabelle wirken.
sql
CREATETRIGGER trigger_name
{BEFORE|AFTER}{INSERT|UPDATE|DELETE}ON table_name
FOREACHSTATEMENTEXECUTEPROCEDUREfunction_name();Bereitgestellt von
In dieser Syntax gibt `FOR EACH STATEMENT` an, dass der Trigger einmal pro Anweisung ausgelöst werden soll, und `EXECUTE PROCEDURE` definiert die Funktion, die aufgerufen werden soll. Beachte, dass Trigger auf Anweisungsebene keinen Zugriff auf die Zeilenwerte `OLD` und `NEW` haben, da sie nicht zeilenspezifisch sind.
Beispiele
1. Grundlegender Auslöser auf Anweisungsebene
sql
-- This function logs an entry into audit_log whenever an INSERT,UPDATE, or DELETE operation is performed on the employees table.CREATEFUNCTIONlog_total_changes()RETURNSTRIGGERAS $$
BEGININSERTINTOaudit_log(event_type, event_time)VALUES(TG_OP,now());RETURNNULL;END;
$$ LANGUAGE plpgsql;CREATETRIGGER audit_changes
AFTERINSERTORUPDATEORDELETEON employees
FOREACHSTATEMENTEXECUTEPROCEDURElog_total_changes();Bereitgestellt von
2. Auslöser für Einfügevorgänge
sql
-- This function logs every INSERT operation on the employees table into the insert_log table with the current timestamp.CREATEFUNCTIONlog_inserts()RETURNSTRIGGERAS $$
BEGININSERTINTOinsert_log(table_name, insert_time)VALUES(TG_TABLE_NAME,now());RETURNNULL;END;
$$ LANGUAGE plpgsql;CREATETRIGGER log_employee_inserts
AFTERINSERTON employees
FOREACHSTATEMENTEXECUTEPROCEDURElog_inserts();Bereitgestellt von
3. Bedingte Trigger-Ausführung
sql
-- This function conditionally calls a notification function only when a DELETE operation is performed on the orders table.CREATEFUNCTIONnotify_admin()RETURNSTRIGGERAS $$
BEGINIF(TG_OP='DELETE')THENPERFORMnotify_admin_function();ENDIF;RETURNNULL;END;
$$ LANGUAGE plpgsql;CREATETRIGGER admin_notification
AFTERDELETEON orders
FOREACHSTATEMENTEXECUTEPROCEDUREnotify_admin();Bereitgestellt von
In diesen Beispielen bezieht sich `TG_OP` auf die Art der Operation (`INSERT`, `UPDATE` oder `DELETE`) und `TG_TABLE_NAME` auf den Namen der Tabelle, für die der Trigger definiert ist.
Tipps und bewährte Praktiken
Begrenze die Komplexität der Auslöser. Halte die Triggerlogik einfach, um unbeabsichtigte Nebeneffekte zu vermeiden und die Leistung zu erhalten.
Verwende Auslöser sparsam. Eine übermäßige Nutzung kann zu Wartungsproblemen führen und die Fehlersuche erschweren.
Dokumentiere die Auslöser klar und deutlich. Dokumentiere immer den Zweck und die Funktion von Triggern in deiner Datenbank.
Teste gründlich. Stelle sicher, dass die Auslöser gründlich getestet werden, um ihr Verhalten in verschiedenen Szenarien zu überprüfen.
Berücksichtige die Auswirkungen auf die Leistung. Sei dir bewusst, dass Trigger die Leistung beeinträchtigen können, besonders in Umgebungen mit vielen Transaktionen.
Erwäge die Verwendung von Triggern auf Zeilenebene für zeilenspezifische Logik. Trigger auf Anweisungsebene sind nicht für zeilenspezifische Vorgänge geeignet, daher solltest du bei Bedarf Trigger auf Zeilenebene verwenden.
Verstehe die Unterschiede zwischen den Auslösern. Trigger auf Anweisungsebene werden einmal pro Anweisung ohne zeilenspezifischen Zugriff ausgeführt, während Trigger auf Zeilenebene für jede betroffene Zeile ausgeführt werden und auf die Werte der "alten" und "neuen" Zeile zugreifen können.
Trigger in PostgreSQL sind spezielle Prozeduren, die automatisch ausgeführt oder abgefeuert werden, wenn bestimmte Ereignisse in einer Datenbanktabelle auftreten. Trigger auf Anweisungsebene werden einmal pro SQL-Anweisung ausgeführt, unabhängig von der Anzahl der Zeilen, die von der Anweisung betroffen sind.
Verwendung
Trigger auf Anweisungsebene werden verwendet, um Geschäftsregeln durchzusetzen, Eingaben zu überprüfen oder Prüfprotokolle zu führen, wenn eine Anweisung eine beliebige Anzahl von Zeilen betrifft. Sie sind so definiert, dass sie vor oder nach den Operationen `INSERT`, `UPDATE` oder `DELETE` in einer Tabelle wirken.
In dieser Syntax gibt `FOR EACH STATEMENT` an, dass der Trigger einmal pro Anweisung ausgelöst werden soll, und `EXECUTE PROCEDURE` definiert die Funktion, die aufgerufen werden soll. Beachte, dass Trigger auf Anweisungsebene keinen Zugriff auf die Zeilenwerte `OLD` und `NEW` haben, da sie nicht zeilenspezifisch sind.
Beispiele
1. Grundlegender Auslöser auf Anweisungsebene
2. Auslöser für Einfügevorgänge
3. Bedingte Trigger-Ausführung
In diesen Beispielen bezieht sich `TG_OP` auf die Art der Operation (`INSERT`, `UPDATE` oder `DELETE`) und `TG_TABLE_NAME` auf den Namen der Tabelle, für die der Trigger definiert ist.
Tipps und bewährte Praktiken