Bei Postgres wird im Gegensatz zu Oracle die Aufgabe in zwei Teile zerlegt:
1. Eine Funktion, die das Doing übernimmt
2. Einen Trigger, der bei einem Event die Funktion aufruft.
CREATE TRIGGER mytrig [BEFORE|AFTER|INSTEAD OF] event_name
ON mytable;
Beispiel: Insert, Update, Delete, Truncate Before Row Trigger
CREATE TRIGGER mytrig BEFORE
INSERT OR DELETE OR UPDATE OR TRUNCATE
ON mytable
FOR EACH ROW
EXECUTE PROCEDURE myfunc();
Beispiel: Insert, Update, Delete, Truncate Instead of Row Trigger (zündet nur bei Änderungen an einer View)
CREATE TRIGGER mytrig INSTEAD OF
INSERT OR DELETE OR UPDATE OR TRUNCATE
ON myview
FOR EACH ROW
EXECUTE PROCEDURE mytrgfunc();
Beispiel für die Funktion, die der Trigger dann aufruft:
CREATE OR REPLACE FUNCTION mytrgfunc()
RETURNS TRIGGER AS $$
BEGIN
INSERT INTO AUDIT(new_col1, old_col2)
VALUES (new.ID, old.ID);
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
Welche Trigger gibt es in der DB?
SELECT * FROM pg_trigger;
oder für eine spezielle Tabelle:
SELECT tgname FROM pg_trigger, pg_class
WHERE tgrelid=pg_class.oid
AND relname='mytab';
Trigger bei Bedarf wieder löschen:
DROP TRIGGER trigger_name;