Teste
Segunda-feira, 10/11/2008 às 10h00, por Danilo Abranches
Para o desenvolvimento deste artigo foram utilizadas a versão 8.2.1 do servidor PostgreSQL e a ferramenta de administração e desenvolvimento, pgAdmin III, para a execução de scripts. Essa ferramenta é disponibilizada junto com o pacote de instalação do servidor PostgreSQL, mas também pode ser obtida no seguinte endereço: http://www.pgadmin.org/download/.
Introdução
Triggers são procedimentos armazenados que são acionados por algum evento e em determinado momento. Na maioria dos bancos de dados estes eventos podem ser inserções (INSERT), atualizações (UPDATE) e exclusões (DELETE), e os momentos podem ser dois: antes da execução do evento (BEFORE) ou depois (AFTER). E isso também vale para o PostgreSQL.
Um diferencial das triggers deste banco de dados para outros é que no PostgreSQL as triggers são sempre associadas a funções de triggers (veremos isso mais adiante) e, nos demais, criamos o corpo da trigger na própria declaração desta.
Tipos de triggers
O PostgreSQL possui dois tipos de triggers: triggers-por-linha e triggers-por-instrução.
A trigger-por-linha é disparada uma vez para cada registro afetado pela instrução que disparou a trigger. Já a trigger-por-instrução é disparada somente uma vez quando a instrução é executada.
Funções de trigger e linguagens procedurais
Funções de triggers são funções que não recebem nenhum parâmetro e retornam o tipo trigger. Essas funções recebem uma estrutura chamada TriggerData, e esta é passada internamente para a função pelo PostgreSQL.
O PostgreSQL disponibiliza duas variáveis importantes para serem usadas em conjunto com as triggers-por-linha: NEW e OLD.
A variável NEW, no caso do INSERT, armazena o registro que está sendo inserido. No caso do UPDATE, armazena a nova versão do registro depois da atualização.
A variável OLD, no caso do DELETE, armazena o registro que está sendo excluído. No caso do