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.







