Trigger in PostgreSQL sind Funktionen, die automatisch als Reaktion auf bestimmte Ereignisse in einer Tabelle ausgeführt werden, wie z.B. INSERT, UPDATE oder DELETE. Ein "BEFORE"-Trigger wird ausgelöst, bevor das Ereignis eintritt. So kannst du die Daten ändern oder Einschränkungen erzwingen, bevor die Datenänderungen übertragen werden.
Verwendung `BEFORE`-Trigger werden verwendet, um Daten zu überprüfen oder zu ändern, bevor sie in einer Tabelle eingefügt, aktualisiert oder gelöscht werden. Sie werden häufig eingesetzt, um Geschäftsregeln durchzusetzen, die Datenintegrität zu überprüfen oder Felder automatisch zu aktualisieren.
sql
CREATETRIGGER trigger_name
BEFOREINSERTORUPDATEORDELETEON table_name
FOREACHROWEXECUTEFUNCTIONfunction_name();Bereitgestellt von
In dieser Syntax gibt das Schlüsselwort "BEFORE" an, dass der Trigger aktiviert werden soll, bevor das/die angegebene(n) Ereignis(e) eintreten. Die `BEFORE`-Trigger unterscheiden sich von den `AFTER`-Triggern, da die `BEFORE`-Trigger vor dem Ereignis ausgeführt werden und eine Datenmanipulation vor dem Abschluss der Transaktion ermöglichen.
Beispiele
1. Grundlegender BEFORE INSERT-Auslöser
sql
CREATEORREPLACEFUNCTIONcheck_positive_salary()RETURNSTRIGGERAS $$
BEGINIFNEW.salary <0THENRAISEEXCEPTION'Salary cannot be negative';ENDIF;RETURNNEW;END;
$$ LANGUAGE plpgsql;CREATETRIGGER check_salary_trigger
BEFOREINSERTON employees
FOREACHROWEXECUTEFUNCTIONcheck_positive_salary();Bereitgestellt von
In diesem Beispiel wird ein Trigger erstellt, der prüft, ob das "Gehalt" positiv ist, bevor eine neue Zeile in die Tabelle "Mitarbeiter" eingefügt wird.
2. BEFORE UPDATE Auslöser zum Protokollieren von Änderungen
sql
CREATEORREPLACEFUNCTIONlog_update()RETURNSTRIGGERAS $$
BEGININSERTINTOemployees_audit(employee_id, old_salary, new_salary, changed_on)VALUES(OLD.id,OLD.salary,NEW.salary,CURRENT_TIMESTAMP);RETURNNEW;END;
$$ LANGUAGE plpgsql;CREATETRIGGER log_update_trigger
BEFOREUPDATEON employees
FOREACHROWEXECUTEFUNCTIONlog_update();Bereitgestellt von
Hier protokolliert ein Trigger Änderungen am Feld "Gehalt" in der Tabelle "Mitarbeiter_Audit", bevor eine Aktualisierung erfolgt.
3. BEFORE DELETE Auslöser für Kaskaden-Aktionen
sql
CREATEORREPLACEFUNCTIONprevent_deletion()RETURNSTRIGGERAS $$
BEGINIFEXISTS(SELECT1FROM orders WHERE orders.employee_id =OLD.id)THENRAISEEXCEPTION'Employee cannot be deleted, related orders exist';ENDIF;RETURNOLD;END;
$$ LANGUAGE plpgsql;CREATETRIGGER prevent_deletion_trigger
BEFOREDELETEON employees
FOREACHROWEXECUTEFUNCTIONprevent_deletion();Bereitgestellt von
Dieser Trigger verhindert, dass ein Mitarbeiter gelöscht wird, wenn es in der Tabelle "Aufträge" zugehörige Bestellungen gibt.
Tipps und bewährte Praktiken
Verwende beschreibende Trigger-Namen. Das verbessert die Lesbarkeit und die Wartung und macht deutlich, wofür jeder Auslöser gedacht ist.
Halte die Auslösefunktionen einfach. Komplexe Logik kann zu Leistungsproblemen führen und ist schwieriger zu debuggen.
Teste gründlich. Stelle sicher, dass sich die Auslöser in allen Szenarien wie erwartet verhalten, um Probleme mit der Datenintegrität zu vermeiden.
Dokumentauslöser. Dokumentiere den Zweck und die Logik jedes Auslösers klar und deutlich, damit du später darauf zurückgreifen und im Team zusammenarbeiten kannst.
Berücksichtige die Auswirkungen auf die Leistung. Trigger können die Leistung beeinträchtigen; verwende sie mit Bedacht, besonders bei großen Tabellen oder häufigen Operationen.
Verstehe das Transaktionsverhalten. BEFORE"-Trigger werden innerhalb der Transaktion ausgeführt, die sie ausgelöst hat, und Änderungen können zurückgenommen werden, wenn die Transaktion fehlschlägt.
Gib die richtige Zeile zurück. Gib immer entsprechend `NEW` oder `OLD` zurück, um sicherzustellen, dass der Trigger richtig funktioniert.
Auslöser vorübergehend deaktivieren. Du kannst Trigger bei Massenoperationen oder Wartungsaufgaben mit `ALTER TABLE table_name DISABLE TRIGGER trigger_name;` deaktivieren und mit `ALTER TABLE table_name ENABLE TRIGGER trigger_name;` wieder aktivieren.
Trigger in PostgreSQL sind Funktionen, die automatisch als Reaktion auf bestimmte Ereignisse in einer Tabelle ausgeführt werden, wie z.B. INSERT, UPDATE oder DELETE. Ein "BEFORE"-Trigger wird ausgelöst, bevor das Ereignis eintritt. So kannst du die Daten ändern oder Einschränkungen erzwingen, bevor die Datenänderungen übertragen werden.
Verwendung
`BEFORE`-Trigger werden verwendet, um Daten zu überprüfen oder zu ändern, bevor sie in einer Tabelle eingefügt, aktualisiert oder gelöscht werden. Sie werden häufig eingesetzt, um Geschäftsregeln durchzusetzen, die Datenintegrität zu überprüfen oder Felder automatisch zu aktualisieren.
In dieser Syntax gibt das Schlüsselwort "BEFORE" an, dass der Trigger aktiviert werden soll, bevor das/die angegebene(n) Ereignis(e) eintreten. Die `BEFORE`-Trigger unterscheiden sich von den `AFTER`-Triggern, da die `BEFORE`-Trigger vor dem Ereignis ausgeführt werden und eine Datenmanipulation vor dem Abschluss der Transaktion ermöglichen.
Beispiele
1. Grundlegender BEFORE INSERT-Auslöser
In diesem Beispiel wird ein Trigger erstellt, der prüft, ob das "Gehalt" positiv ist, bevor eine neue Zeile in die Tabelle "Mitarbeiter" eingefügt wird.
2. BEFORE UPDATE Auslöser zum Protokollieren von Änderungen
Hier protokolliert ein Trigger Änderungen am Feld "Gehalt" in der Tabelle "Mitarbeiter_Audit", bevor eine Aktualisierung erfolgt.
3. BEFORE DELETE Auslöser für Kaskaden-Aktionen
Dieser Trigger verhindert, dass ein Mitarbeiter gelöscht wird, wenn es in der Tabelle "Aufträge" zugehörige Bestellungen gibt.
Tipps und bewährte Praktiken