PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Migrazione del trigger da Oracle 11g a Postgresql 8.4

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 

Trigger:

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 AFTER innesco per semplificare. Un BEFORE trigger dovrebbe RETURN NEW per far funzionare gli aggiornamenti, ma NEW non è visibile in un DELETE grilletto. Quindi avresti bisogno di IF TG_OP = ... ecc.

  • Fornisci sempre un elenco di destinazioni per INSERT persistente dichiarazioni. Questo è altrettanto negativo in un trigger Oracle.

  • Probabilmente hai una tabella con un serial colonna. Basta non menzionarlo nell'inserto, l'ID successivo della sequenza viene inserito automaticamente.

Ci sono numerosi esempi di codice qui su SO.