sql >> Base de Datos >  >> RDS >> PostgreSQL

Activador de migración de Oracle 11g a Postgresql 8.4

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 

Activador:

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. UN BEFORE el activador tendría que RETURN NEW para que las actualizaciones funcionen, pero NEW no es visible en un DELETE generar. Entonces necesitarías IF 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.