Direkt zum Inhalt
Urkunden
JSON-FunktionenTabellen & Schema ManagementMathe-FunktionenDatenbankenString-FunktionenAuslöserIndizesDatum FunktionenBasic Syntax

PostgreSQL INSTEAD OF triggers

Trigger in PostgreSQL sind spezielle Prozeduren, die als Reaktion auf bestimmte Ereignisse in einer Tabelle oder Ansicht automatisch ausgeführt werden. Mit dem `INSTEAD OF`-Trigger kannst du das Verhalten von Aktionen wie `INSERT`, `UPDATE` oder `DELETE` für Views festlegen.

Verwendung

INSTEAD OF"-Trigger werden verwendet, wenn du die Standardaktion einer Ansicht außer Kraft setzen musst, um komplexe Logik oder Datenmanipulationen zu ermöglichen, die nicht direkt von Standard-SQL-Operationen unterstützt werden. Diese Auslöser sind so definiert, dass sie "VOR" dem auslösenden Ereignis auftreten. Beachte, dass "INSTEAD OF"-Trigger nur auf Views und nicht auf Tabellen anwendbar sind.


CREATE TRIGGER trigger_name
INSTEAD OF {INSERT | UPDATE | DELETE}
ON view_name
FOR EACH ROW
EXECUTE FUNCTION function_name();

In dieser Syntax gibt `INSTEAD OF` an, dass der Trigger die Standardoperation auf der angegebenen Ansicht durch die in `Funktionsname` definierte Logik ersetzt. Die Datensätze "NEU" und "ALT" in den Triggerfunktionen stellen die neuen Daten für "EINFÜGEN" oder "AKTUALISIEREN" bzw. die vorhandenen Daten für "AKTUALISIEREN" oder "LÖSCHEN" dar.

Beispiele

1. Basic INSTEAD OF INSERT Auslöser


CREATE FUNCTION insert_employee()
RETURNS TRIGGER AS $$
BEGIN
    INSERT INTO employees (id, name)
    VALUES (NEW.id, NEW.name);
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER insert_employee_trigger
INSTEAD OF INSERT ON employees_view
FOR EACH ROW
EXECUTE FUNCTION insert_employee();

In diesem Beispiel wird ein `INSTEAD OF INSERT`-Trigger definiert, der Daten in die Tabelle `Mitarbeiter` einfügt, wenn eine Einfügung in `employees_view` versucht wird.

2. INSTEAD OF UPDATE Auslöser


CREATE FUNCTION update_employee_name()
RETURNS TRIGGER AS $$
BEGIN
    UPDATE employees
    SET name = NEW.name
    WHERE id = OLD.id;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER update_employee_trigger
INSTEAD OF UPDATE ON employees_view
FOR EACH ROW
EXECUTE FUNCTION update_employee_name();

Dieser Trigger ersetzt eine Aktualisierung von `employees_view` durch eine Aktualisierung von `employees` und ändert das Feld `name` basierend auf den Änderungen in der View.

3. INSTEAD OF DELETE Auslöser


CREATE FUNCTION delete_employee()
RETURNS TRIGGER AS $$
BEGIN
    DELETE FROM employees
    WHERE id = OLD.id;
    RETURN OLD;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER delete_employee_trigger
INSTEAD OF DELETE ON employees_view
FOR EACH ROW
EXECUTE FUNCTION delete_employee();

Der Trigger verarbeitet Löschungen in der `employees_view`, indem er den entsprechenden Eintrag in der `employees` Tabelle löscht.

Tipps und bewährte Praktiken

  • Verwendung mit Views. INSTEAD OF"-Trigger sind vor allem bei Views nützlich, da du damit festlegen kannst, wie Operationen in einem View in Basistabellen übertragen werden.
  • Stelle die Korrektheit der Funktion sicher. Die Funktion, die im Auslöser verwendet wird, sollte alle möglichen Fälle für den Vorgang behandeln, um unerwartetes Verhalten zu vermeiden.
  • Teste die Auslöser gründlich. Da Trigger das Standardverhalten ändern können, ist ein gründliches Testen wichtig, um sicherzustellen, dass sie wie erwartet funktionieren.
  • Verwende Transaktionen. Ziehe in Erwägung, Transaktionen innerhalb von Triggerfunktionen zu verwenden, um die Datenintegrität zu wahren, vor allem, wenn der Vorgang mehrere Schritte umfasst.
  • Dokumentiere deine Auslöser. Eine klare Dokumentation trägt dazu bei, dass der Code lesbar bleibt und hilft anderen Entwicklern, die angepasste Logik zu verstehen.
  • Berücksichtige die Auswirkungen auf die Leistung. Sei dir bewusst, dass komplexe Logik in `INSTEAD OF`-Triggern zu Leistungseinbußen führen kann, also optimiere die Triggerfunktionen auf Effizienz.

Zusätzliche Überlegungen

  • Anwendungsfälle. INSTEAD OF"-Trigger sind besonders nützlich für die Handhabung komplexer View-Logik, die nicht direkt in SQL ausgedrückt werden kann.
  • Versionsinformationen. Die `INSTEAD OF`-Trigger wurden in PostgreSQL Version 9.1 eingeführt, was für die Kompatibilität mit älteren Systemen wichtig ist.