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 umAFTERgatilho para simplificar. UmBEFOREo gatilho teria queRETURN NEWpara que as atualizações funcionem, masNEWnão é visível em umDELETEacionar. Então você precisaria deIF TG_OP = ...etc.
-
Sempre forneça uma lista de destino paraINSERTpersistente declarações. Isso é tão ruim em um gatilho Oracle.
-
Você provavelmente tem uma tabela com umserialcoluna. 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.