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 umAFTER
gatilho para simplificar. UmBEFORE
o gatilho teria queRETURN NEW
para que as atualizações funcionem, masNEW
não é visível em umDELETE
acionar. Então você precisaria deIF TG_OP = ...
etc.
-
Sempre forneça uma lista de destino paraINSERT
persistente declarações. Isso é tão ruim em um gatilho Oracle.
-
Você provavelmente tem uma tabela com umserial
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.