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:

PostgreSQL CREATE tRIGGER

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:

PostgreSQL CREATE tRIGGER

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:

Gatilho de lista Postgres

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

  1. Na barra de navegaรงรฃo ร  esquerda, clique em Bancos de dados.
  2. Clique em Demonstraรงรฃo.

Criar gatilho em PostgreSQL usando pgAdmin

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

Criar gatilho em PostgreSQL usando pgAdmin

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

  1. Execute o seguinte comando para inserir um novo registro na tabela Preรงo:
    INSERT INTO Price
    VALUES (3, 400)
  2. Execute o seguinte comando para verificar se um registro foi inserido na tabela Price_Audits:
    SELECT * FROM Price_Audits

    Isso deve retornar o seguinte:

Criar gatilho em PostgreSQL usando pgAdmin

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:

Listando gatilhos usando pgAdmin

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

Resuma esta postagem com: