PostgreSQL Gatilhos: criar, listar e descartar com exemplo
O que é o gatilho PostgreSQL?
A PostgreSQL Gatilho é uma função que é acionada automaticamente quando ocorre um evento de banco de dados em um objeto de banco de dados. Por exemplo, uma mesa. Exemplos de eventos de banco de dados que podem ativar um gatilho incluem INSERT, UPDATE, DELETE, etc. Além disso, quando você cria um gatilho para uma tabela, o gatilho será eliminado automaticamente quando a tabela for excluída.
Como o Trigger é usado em PostgreSQL?
Um gatilho pode ser marcado com o operador FOR EACH ROW durante sua criação. Esse gatilho será chamado uma vez para cada linha modificada pela operação. Um gatilho também pode ser marcado com o operador FOR EACH STATEMENT durante sua criação. Este gatilho será executado apenas uma vez para uma operação específica.
PostgreSQL CREATE tRIGGER
Para criar um gatilho, usamos a função CREATE TRIGGER. Aqui está a sintaxe da função:
CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-name ON table-name [ -- Trigger logic ];
O nome do gatilho é o nome do gatilho.
BEFORE, AFTER e INSTEAD OF são palavras-chave que determinam quando o gatilho será invocado.
O nome do evento é o nome do evento que fará com que o gatilho seja invocado. Isso pode ser INSIRA, ATUALIZAR, EXCLUIR, etc.
O nome da tabela é o nome da tabela na qual o gatilho será criado.
Se o gatilho for criado para uma operação INSERT, devemos adicionar o parâmetro ON nome-da-coluna.
A sintaxe a seguir demonstra isso:
CREATE TRIGGER trigger-name AFTER INSERT ON column-name ON table-name [ -- Trigger logic ];
PostgreSQL Exemplo de criação de gatilho
Usaremos a tabela de preços fornecida abaixo:
Preço:
Vamos criar outra tabela, Price_Audits, onde registraremos as alterações feitas na tabela Price:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL );
Agora podemos definir uma nova função chamada auditfunc:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$ BEGIN INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp); RETURN NEW; END; $my_table$ LANGUAGE plpgsql;
A função acima irá inserir um registro na tabela Price_Audits incluindo o novo ID da linha e a hora em que o registro foi criado.
Agora que temos a função trigger, devemos vinculá-la à nossa tabela Price. Daremos ao gatilho o nome price_trigger. Antes de um novo registro ser criado, a função de gatilho será invocada automaticamente para registrar as alterações. Aqui está o gatilho:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc();
Vamos inserir um novo registro na tabela Price:
INSERT INTO Price VALUES (3, 400);
Agora que inserimos um registro na tabela Price, um registro também deverá ser inserido na tabela Price_Audit. Isso será resultado do gatilho que criamos na tabela Preço. Vamos verificar isso:
SELECT * FROM Price_Audits;
Isso retornará o seguinte:
O gatilho funcionou com sucesso.
Gatilho de lista Postgres
Todos os gatilhos que você cria em PostgreSQL são armazenados na tabela pg_trigger. Para ver a lista de gatilhos que você tem no banco de dados, consulte a tabela executando o comando SELECT conforme mostrado abaixo:
SELECT tgname FROM pg_trigger;
Isso retorna o seguinte:
A coluna tgname da tabela pg_trigger indica o nome do gatilho.
Gatilho de queda do Postgres
Para largar um PostgreSQL gatilho, usamos a instrução DROP TRIGGER com a seguinte sintaxe:
DROP TRIGGER [IF EXISTS] trigger-name ON table-name [ CASCADE | RESTRICT ];
O parâmetro trigger-name indica o nome do gatilho que será excluído.
O nome da tabela indica o nome da tabela da qual o gatilho será excluído.
A cláusula IF EXISTS tenta excluir um gatilho que existe. Se você tentar excluir um gatilho que não existe sem usar a cláusula IF EXISTS, receberá um erro.
A opção CASCADE irá ajudá-lo a eliminar automaticamente todos os objetos que dependem do gatilho.
Se você usar a opção RESTRICT, o gatilho não será excluído se os objetos dependerem dele.
Por exemplo:
Para excluir o trigger denominado example_trigger na tabela Price, executamos o seguinte comando:
Para descartar o gatilho chamado example_trigger na tabela Empresa, execute o seguinte comando:
DROP TRIGGER example_trigger IF EXISTS ON Company;
Usando pgAdmin
Agora vamos ver como todas as três ações foram executadas usando o pgAdmin.
Como criar um gatilho em PostgreSQL usando pgAdmin
Veja como você pode criar um gatilho no Postgres usando pgAdmin:
Etapa 1) Faça login em sua conta pgAdmin
Abra o pgAdmin e faça login em sua conta usando suas credenciais
Etapa 2) Crie um banco de dados de demonstração
- Na barra de navegação à esquerda, clique em Bancos de dados.
- Clique em Demonstração.
Etapa 3) Digite a consulta
Para criar a tabela Price_Audits, digite a consulta no editor:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL )
Etapa 4) Execute a consulta
Clique no botão Executar
Etapa 5) Execute o código para auditfunc
Execute o seguinte código para definir a função auditfunc:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$ BEGIN INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp); RETURN NEW; END; $my_table$ LANGUAGE plpgsql
Etapa 6) Execute o código para criar o gatilho
Execute o código a seguir para criar o gatilho price_trigger:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc()
Etapa 7) Insira um novo registro
- Execute o seguinte comando para inserir um novo registro na tabela Preço:
INSERT INTO Price VALUES (3, 400)
- Execute o seguinte comando para verificar se um registro foi inserido na tabela Price_Audits:
SELECT * FROM Price_Audits
Isso deve retornar o seguinte:
Etapa 8) Verifique o conteúdo da tabela
Vamos verificar o conteúdo da tabela Price_Audits:
Listando gatilhos usando pgAdmin
Passo 1) Execute o seguinte comando para verificar os gatilhos em seu banco de dados:
SELECT tgname FROM pg_trigger
Isso retorna o seguinte:
Descartando gatilhos usando pgAdmin
Para descartar o gatilho chamado example_trigger na tabela Empresa, execute o seguinte comando:
DROP TRIGGER example_trigger IF EXISTS ON Company
Resumo
- A PostgreSQL trigger refere-se a uma função que é acionada automaticamente quando ocorre um evento de banco de dados em um objeto de banco de dados, como uma tabela.
- Exemplos de tais eventos de banco de dados incluem INSERT, UPDATE, DELETE, etc.
- Um gatilho existe apenas durante a vida útil do objeto de banco de dados para o qual foi criado.
- Se o objeto de banco de dados for excluído, o gatilho também será excluído.
- PostgreSQL os gatilhos são criados usando a instrução CREATE TRIGGER.
- Cada gatilho está associado a uma função que indica o que o gatilho fará quando for invocado.
Baixe o banco de dados usado neste tutorial