Los disparadores en Postgres no proporcionan un código de disparador directamente, sino que llaman a una función de disparador , a los que se puede llamar desde cualquier número de disparadores, aunque a menudo se personalizan para un evento en particular en una tabla en particular.
Función de disparo:
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()
-
Que sea un
AFTERgatillo para simplificar. UNBEFOREel activador tendría queRETURN NEWpara que las actualizaciones funcionen, peroNEWno es visible en unDELETEgenerar. Entonces necesitaríasIF TG_OP = ...etc. -
Proporcione siempre una lista de objetivos para
INSERTpersistentes declaraciones. Esto es igual de malo en un activador de Oracle. -
Probablemente tenga una tabla con un
serialcolumna. Simplemente no lo mencione en el inserto, la siguiente identificación de la secuencia se inserta automáticamente.
Hay numerosos ejemplos de código aquí en SO.