O que são gatilhos Postgresql?
Um gatilho PostgreSQL é uma função que é disparada automaticamente quando um evento de banco de dados ocorre 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.
Neste Tutorial do PostgreSQL, você aprenderá o seguinte:
- O que são gatilhos Postgresql?
- Como o Trigger é usado no POSRGREQL?
- Criação de um gatilho
- Usando o pgAdmin
- Soltando gatilhos
Como o Trigger é usado no POSRGREQL?
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.
Criação de um gatilho
Para criar um gatilho, usamos a função CREATE TRIGGER. Esta é a sintaxe da função:
CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-nameON 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á chamado.
O nome do evento é o nome do evento que fará com que o gatilho seja chamado. Isso pode ser INSERT, UPDATE, DELETE, etc.
O nome da tabela é o nome da tabela na qual o gatilho deve ser criado.
Se o gatilho for criado para uma operação INSERT, devemos adicionar o parâmetro ON nome-da-coluna.
A seguinte sintaxe demonstra isso:
CREATE TRIGGER trigger-name AFTER INSERT ON column-nameON table-name[-- Trigger logic];
Por exemplo:
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$BEGININSERT 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 de linha e a hora em que o registro é criado.
Agora que temos a função de gatilho, devemos vinculá-la à nossa tabela Price. Daremos à trigger o nome price_trigger. Antes de um novo registro ser criado, a função de gatilho será chamada automaticamente para registrar as alterações. Aqui está o gatilho:
CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc();
Vamos inserir um novo registro na tabela Price:
INSERT INTO PriceVALUES (3, 400);
Agora que inserimos um registro na tabela Price, um registro também deve ser inserido na tabela Price_Audit. Isso será o resultado do acionador que criamos na tabela de preços. Vamos verificar isso:
SELECT * FROM Price_Audits;
Isso retornará o seguinte:
O gatilho funcionou com sucesso.
Listagem de gatilhos
Todos os triggers que você cria no 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 denota o nome do gatilho.
Soltando gatilhos
Para descartar um gatilho PostgreSQL, usamos a instrução DROP TRIGGER com a seguinte sintaxe:
DROP TRIGGER [IF EXISTS] trigger-nameON table-name [ CASCADE | RESTRICT ];
O parâmetro nome do acionador denota o nome do acionador que deve ser excluído.
O nome da tabela denota o nome da tabela da qual o gatilho deve ser excluído.
A cláusula IF EXISTS tenta excluir um gatilho existente. 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 descartar todos os objetos que dependem do gatilho automaticamente.
Se você usar a opção RESTRICT, o gatilho não será excluído se houver objetos dependendo dele.
Por exemplo:
Para excluir o gatilho denominado example_trigger na tabela Price, executamos o seguinte comando:
Para soltar o gatilho denominado example_trigger na tabela Company, execute o seguinte comando:
DROP TRIGGER example_trigger IF EXISTSON Company;
Usando o pgAdmin
Agora vamos ver como todas as três ações são executadas usando o pgAdmin.
Criação de gatilhos
Para fazer o mesmo por meio do pgAdmin, faça o seguinte:
Etapa 1) Faça login em sua conta pgAdmin.
Passo 2)
- Na barra de navegação à esquerda, clique em Bancos de dados.
- Clique em Demo.
Etapa 3) Para criar a tabela Price_Audits, digite o editor de consultas:
CREATE TABLE Price_Audits (book_id INT NOT NULL,entry_date text NOT NULL)
Etapa 4) Clique no botão Executar.
Etapa 5) Execute o seguinte código para definir a função auditfunc:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$BEGININSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);RETURN NEW;END;$my_table$ LANGUAGE plpgsql
Etapa 6) Execute o seguinte código para criar o acionador price_trigger:
CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc()
Etapa 7)
- Execute o seguinte comando para inserir um novo registro na tabela Price:
INSERT INTO PriceVALUES (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) Vamos verificar o conteúdo da tabela Price_Audits:
Listagem de gatilhos
Etapa 1) Execute o seguinte comando para verificar os gatilhos em seu banco de dados:
SELECT tgname FROM pg_trigger
Isso retorna o seguinte:
Soltando gatilhos
Para soltar o gatilho denominado example_trigger na tabela Company, execute o seguinte comando:
DROP TRIGGER example_trigger IF EXISTSON Company
Resumo:
- Um gatilho PostgreSQL se refere a uma função que é disparada automaticamente quando um evento de banco de dados ocorre 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 o tempo de vida 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.
- Os gatilhos do PostgreSQL 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