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
AFTER
gatillo para simplificar. UNBEFORE
el activador tendría queRETURN NEW
para que las actualizaciones funcionen, peroNEW
no es visible en unDELETE
generar. Entonces necesitaríasIF TG_OP = ...
etc. -
Proporcione siempre una lista de objetivos para
INSERT
persistentes declaraciones. Esto es igual de malo en un activador de Oracle. -
Probablemente tenga una tabla con un
serial
columna. 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.