PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Trigger von Oracle 11g auf Postgresql 8.4 migrieren

Trigger in Postgres liefern keinen Triggercode direkt, sondern rufen eine Triggerfunktion auf , die von einer beliebigen Anzahl von Triggern aufgerufen werden können, obwohl sie oft für ein bestimmtes Ereignis in einer bestimmten Tabelle angepasst werden.

Triggerfunktion:

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 

Trigger:

CREATE TRIGGER foo         -- not:  "CREATE OR REPLACE" !
AFTER UPDATE OR DELETE ON some_tbl
FOR EACH ROW EXECUTE PROCEDURE trg_some_tbl_foo()
  • Machen Sie es zu einem AFTER auslösen, um zu vereinfachen. Ein BEFORE Trigger müsste RETURN NEW sein damit Updates funktionieren, aber NEW ist in einem DELETE nicht sichtbar Abzug. Sie brauchen also IF TG_OP = ... usw.

  • Geben Sie immer eine Zielliste für persistente INSERT an Aussagen. Das ist bei einem Oracle-Trigger genauso schlimm.

  • Wahrscheinlich haben Sie eine Tabelle mit einer serial Säule. Erwähnen Sie es einfach nicht in der Einfügung, die nächste ID aus der Sequenz wird automatisch eingefügt.

Es gibt zahlreiche Codebeispiele hier auf SO.