Summary: neste tutorial, você aprenderá como usar o comando PostgreSQL CREATE TRIGGER
para criar um trigger.
Para criar um novo trigger no PostgreSQL, siga estes passos:
- Primeiro, crie uma função trigger usando o comando
CREATE FUNCTION
. - Segundo, ligue a função de trigger a uma tabela usando
CREATE TRIGGER
instrução.
Se você não está familiarizado com a criação de uma função definida pelo usuário, você pode verificar a seção PL/pgSQL.
Criar sintaxe da função de trigger
Uma função de trigger é similar a uma função definida pelo usuário normal. No entanto, uma função de trigger não aceita nenhum argumento e tem um valor de retorno com o tipo trigger
.
O seguinte ilustra a sintaxe da criação da função de trigger:
Code language: SQL (Structured Query Language) (sql)
Note que você pode criar uma função de trigger usando qualquer linguagem suportada pelo PostgreSQL. Neste tutorial, vamos usar PL/pgSQL.
A função trigger recebe dados sobre seu ambiente de chamada através de uma estrutura especial chamada TriggerData que contém um conjunto de variáveis locais.
Por exemplo, OLD
e NEW
representam os estados da linha na tabela antes ou depois do evento de acionamento.
PostgreSQL também fornece outras variáveis locais precedidas por TG_
como TG_WHEN
, e TG_TABLE_NAME
.
Após você definir uma função trigger, você pode vinculá-la a um ou mais eventos trigger como INSERT
, UPDATE
, e DELETE
.
Introduction to PostgreSQL CREATE TRIGGER statement
O comando CREATE TRIGGER
cria um novo trigger. O seguinte ilustra a sintaxe básica da instrução CREATE TRIGGER
:
Code language: SQL (Structured Query Language) (sql)
Nesta sintaxe:
Primeiro, especifique o nome do trigger após as TRIGGER
palavras-chave.
Segundo, especifique o tempo que causa o disparo do trigger. Pode ser BEFORE
ou AFTER
ocorre um evento.
Terceiro, especifique o evento que invoca o gatilho. O evento pode ser INSERT
, DELETE
, UPDATE
ou TRUNCATE
.
Quarto, especifique o nome da tabela associada ao gatilho após a palavra-chave ON
.
Fifth, especifique o tipo de trigger que pode ser:
- Travador de nível de linha que é especificado pela cláusula
FOR EACH ROW
. - Travador de nível de linha que é especificado pela cláusula
FOR EACH STATEMENT
.
A disparo em nível de linha é disparado para cada linha enquanto um disparo em nível de declaração é disparado para cada transação.
Suponha que uma tabela tenha 100 linhas e dois disparos que serão disparados quando um evento DELETE
ocorrer.
Se a instrução DELETE
apagar 100 linhas, o disparo em nível de linha será disparado 100 vezes, uma vez para cada linha apagada. Por outro lado, um gatilho em nível de declaração será disparado uma vez, independente de quantas linhas forem excluídas.
Finalmente, especifique o nome da função de gatilho após as palavras-chave EXECUTE PROCEDURE
.
PostgreSQL CREATE TRIGGER exemplo
A seguinte instrução cria uma nova tabela chamada employees
:
Code language: SQL (Structured Query Language) (sql)
Suponha que quando o nome de um funcionário mudar, você queira registrar as mudanças em uma tabela separada chamada employee_audits
:
Code language: SQL (Structured Query Language) (sql)
Primeiro, crie uma nova função chamada log_last_name_changes
:
Code language: SQL (Structured Query Language) (sql)
A função insere o sobrenome antigo na tabela employee_audits
incluindo o id do empregado, sobrenome, e a hora da mudança se o sobrenome de um empregado mudar.
O OLD
representa a linha antes da atualização enquanto o NEW
representa a nova linha que será atualizada. O OLD.last_name
retorna o sobrenome antes da atualização e o NEW.last_name
retorna o novo sobrenome.
Segundo, vincule a função de acionamento à tabela employees
. O nome do gatilho é last_name_changes
. Antes que o valor da coluna last_name
seja atualizado, a função trigger é automaticamente invocada para registrar as alterações.
Code language: SQL (Structured Query Language) (sql)
Terceiro, insira algumas linhas na tabela employees
:
Code language: SQL (Structured Query Language) (sql)
Quarto, examine o conteúdo da tabela employees
:
Code language: SQL (Structured Query Language) (sql)
Suponha que Lily Bush
mude seu sobrenome para Lily Brown
.
Fifth, atualize o sobrenome da Lily para o novo:
Code language: SQL (Structured Query Language) (sql)
Seventh, verifique se o sobrenome de Lily
foi atualizado:
Code language: SQL (Structured Query Language) (sql)