I trigger in Postgres non forniscono direttamente il codice trigger, ma chiamano una funzione trigger , che può essere chiamato da un numero qualsiasi di attivatori, anche se spesso sono personalizzati per un evento particolare su una tabella particolare.
Funzione di attivazione:
CREATE OR REPLACE FUNCTION trg_some_tbl_foo()
RETURNS trigger AS
$func$
BEGIN
INSERT INTO some_tbl(key, name, describe) -- or some_other_tbl?
VALUES (OLD.key, OLD.name, OLD.describe);
RETURN OLD;
END
$func$ LANGUAGE plpgsql
CREATE TRIGGER foo -- not: "CREATE OR REPLACE" !
AFTER UPDATE OR DELETE ON some_tbl
FOR EACH ROW EXECUTE PROCEDURE trg_some_tbl_foo()
-
Rendilo un
AFTER
innesco per semplificare. UnBEFORE
trigger dovrebbeRETURN NEW
per far funzionare gli aggiornamenti, maNEW
non è visibile in unDELETE
grilletto. Quindi avresti bisogno diIF TG_OP = ...
ecc. -
Fornisci sempre un elenco di destinazioni per
INSERT
persistente dichiarazioni. Questo è altrettanto negativo in un trigger Oracle. -
Probabilmente hai una tabella con un
serial
colonna. Basta non menzionarlo nell'inserto, l'ID successivo della sequenza viene inserito automaticamente.
Ci sono numerosi esempi di codice qui su SO.