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
AFTERinnesco per semplificare. UnBEFOREtrigger dovrebbeRETURN NEWper far funzionare gli aggiornamenti, maNEWnon è visibile in unDELETEgrilletto. Quindi avresti bisogno diIF TG_OP = ...ecc. -
Fornisci sempre un elenco di destinazioni per
INSERTpersistente dichiarazioni. Questo è altrettanto negativo in un trigger Oracle. -
Probabilmente hai una tabella con un
serialcolonna. Basta non menzionarlo nell'inserto, l'ID successivo della sequenza viene inserito automaticamente.
Ci sono numerosi esempi di codice qui su SO.