PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Migrando o gatilho do Oracle 11g para o Postgresql 8.4


Triggers no Postgres não fornecem código de trigger diretamente, mas chamam uma função de trigger , que pode ser chamado de qualquer número de gatilhos, embora geralmente sejam personalizados para um evento específico em uma tabela específica.

Função de gatilho:
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 

Acionador:
CREATE TRIGGER foo         -- not:  "CREATE OR REPLACE" !
AFTER UPDATE OR DELETE ON some_tbl
FOR EACH ROW EXECUTE PROCEDURE trg_some_tbl_foo()

  • Faça um AFTER gatilho para simplificar. Um BEFORE o gatilho teria que RETURN NEW para que as atualizações funcionem, mas NEW não é visível em um DELETE acionar. Então você precisaria de IF TG_OP = ... etc.

  • Sempre forneça uma lista de destino para INSERT persistente declarações. Isso é tão ruim em um gatilho Oracle.

  • Você provavelmente tem uma tabela com um serial coluna. Só não mencione isso na inserção, o próximo id da sequência é inserido automaticamente.

Existem vários exemplos de código aqui no SO.