Como configurar os gatilhos PostGresql

Como configurar os gatilhos PostGresql
“O gatilho é usado em qualquer banco de dados para executar alguma tarefa automatizada quando um evento de banco de dados específico aparece. É chamado de função de retorno de chamada do banco de dados que é chamado automaticamente com base no evento. Existem muitos benefícios de usar gatilhos no banco de dados PostgreSQL. Três tipos de gatilhos podem ser criados, que são descritos neste tutorial usando vários exemplos.”

Alguns benefícios do uso de gatilhos

  • A validação de dados pode ser feita facilmente.
  • O valor único de um novo registro pode ser gerado.
  • O desenvolvimento de aplicativos se torna mais rápido.
  • As regras de negócios do aplicativo podem ser aplicadas.
  • A manutenção do aplicativo se torna mais fácil.

Sintaxe

A sintaxe de criar um gatilho é dada abaixo.

Crie [ou substitua] [restrição] Nome do gatilho Antes | Depois | Em vez de event [ou…]
Na tabela_name
[De referenced_table_name]
[Não diferido | [Diferido] [inicialmente imediato | Inicialmente adiado]]
[Referência Old | Novo tabela [como] transition_relation_name […]]
[Para [cada] linha | DECLARAÇÃO ]
[Quando (condição)]
Execute function | Procedimento function_name (argumentos)
  • Criar palavras -chave é usado para criar um novo gatilho e a palavra -chave substitua é usada para modificar um gatilho existente.
  • A opção de restrição é usada para criar um gatilho de restrição que seja disparado com base no valor da restrição.
  • Um nome de gatilho exclusivo é usado para criar o gatilho.
  • Quatro tipos de eventos podem ser usados ​​para criar um gatilho. Estes são inserir, atualizar, excluir e truncar.
  • Três tipos de gatilhos que podem ser criados são ANTES, DEPOIS, e EM VEZ DE. Os gatilhos podem ser criados para a tabela, tabela estrangeira e visualização. ANTES e DEPOIS Os gatilhos suportam o suporte, atualizam e excluem operações para a tabela e a tabela estrangeira no nível da linha, e a visualização também no nível de declaração. EM VEZ DE O Trigger suporta inserir, atualizar e excluir operações para visualização apenas no nível da linha. Evento truncado pode ser usado para a tabela apenas no nível da declaração.
  • Depois de definir o evento, o nome da tabela ou tabela ou visualização estrangeira é usada para a qual o gatilho será criado.
  • O referenciado_table_name é usado para restrição de chave estrangeira e apenas o gatilho de restrição.
  • O tempo padrão do gatilho é definido por Não é adiado ou Diferido ou Inicialmente imediato ou Inicialmente adiado.
  • Referência A palavra -chave é usada para declarar um ou dois nomes de relação.
  • Tabela velha ou Novo tablA Cláusula define a relação de transição antes da imagem ou a relação de transição pós-imagem.
  • transição_relation_name é usado dentro do gatilho para a relação de transição.
  • Para cada linha ou Para cada declaração define se a função de gatilho deve ser disparada uma vez para cada linha afetada pelo evento de gatilho ou apenas uma vez por instrução sql. Para cada declaração é o padrão.
  • doença determina se a função de gatilho será executada ou não.
  • function_name é uma função definida pelo usuário que não leva argumento, e o tipo de retorno é o gatilho que é executado quando o gatilho dispara.
  • A lista de argumentos separada por vírgula é passada para a função quando o gatilho é executado.

Pré-requisitos

A. Instale o PostGresql

Você deve instalar a versão mais recente dos pacotes PostGresql no sistema operacional Linux antes de executar as instruções SQL mostradas neste tutorial. Execute os seguintes comandos para instalar e iniciar o PostgreSQL:

$ sudo apt-get -y install postgresql postgresql-contra
$ sudo SystemCtl Iniciar PostgreSQL.serviço

B. Execute o seguinte comando para fazer login no PostgreSQL com privilégio de root.

$ sudo -u postgres psql

C. Você pode criar um banco de dados chamado “testdb ” executando a seguinte instrução SQL.

# Criar banco de dados TestDB;

Se você quiser criar uma tabela para o testdb banco de dados, então você tem que digitar "\ C" Para alterar o banco de dados. Mas neste tutorial, eu não mudei o banco de dados, e a tabela e todas as funções foram criadas no banco de dados padrão nomeado PostGres.

Crie uma tabela chamada professores e cursos com alguns registros para testar o uso de gatilhos que serão criados posteriormente neste tutorial.

Crie professores de mesa (
Id Id Serial Primary Key,
Nome Varchar (30),
Endereço Varchar (100),
Contact_no Varchar (20),
BOOL DISPONÍVEL PADRÃO TRUE);
Crie cursos de tabela (
Curso -Curso Primário Série,
Nome Varchar (30),
credit_hour flutuar,
professor_id int padrão 0);
Insira nos professores (nome, endereço, contato_no, disponível)
valores
('Nasir uddin', 'dhanmondi 15, dhaka', '+8801947854523', false),
('Farzana mahmud', '39/1, jigatola, dhaka ',' +88018553426754 ', false);
Insira em cursos (nome, credit_hour, professor_id)
valores
('Física', 2.0, 1),
('Química', 2.0, 2),
('Math', 3.0, 1);

Exemplos de gatilho

Cada gatilho está associado a uma função PostgreSQL. Então, você precisa criar a função antes de criar o gatilho. A maneira de criar diferentes tipos de gatilhos foi demonstrada nesta parte do tutorial.

Exemplo 1: Crie antes do Inserir Trigger

A inserção anterior desencadeia disparos antes de realizar qualquer operação de inserção. Execute a seguinte instrução SQL para criar uma função nomeada antes_insert () que será usado em um Antes de inserir acionar. Um dos principais propósitos de usar um gatilho é a validação de dados. A função a seguir verificará se os campos específicos estão vazios ou não. Se algum dos valores do campo permanecer vazio, uma mensagem de erro específica será levantada. Outra validação será verificada para o nome campo e uma mensagem de erro será levantada se o comprimento deste campo for menor que 5. A próxima declaração condicional é usada para concatenar o valor da string “+88” com o contact_no Se o comprimento do contact_no campo é 11.

Crie ou substitua a função Antes_insert ()
Retorna o gatilho como
$$
COMEÇAR
Se novo.nome = "ou novo.endereço = "ou novo.contact_no = "então
levantar 'nome ou endereço ou campo de contato_no está vazio.';
FIM SE;
Se comprimento (novo.nome) < 5 THEN
Raise 'Nome Field deve conter mais de 5 caracteres.';
FIM SE;
Se comprimento (novo.contact_no) = 11 então
NOVO.contact_no = '+88' || NOVO.contact_no;
FIM SE;
Retornar novo;
FIM;
$$
Idioma 'PLPGSQL';

A saída a seguir aparecerá se a função for criada com sucesso no PostGres base de dados.

Execute a seguinte instrução SQL para criar um gatilho nomeado check_before_insert que executará o antes_insert () função antes de inserir o novo registro para o professores mesa.

Crie Trigger check_before_insert
Antes de inserir
Em professores
Para cada linha
Executar função anterior_insert ();

A saída a seguir aparecerá se o gatilho for criado com sucesso.

Execute a seguinte declaração de inserção que contém todos os dados válidos.

Insira nos professores (nome, endereço, contato_no)
Valores ('Zafar iqbal', 'mirpur, dhaka', '01738975634');

A saída a seguir aparecerá se o novo registro for inserido com sucesso.

Execute a seguinte declaração de inserção que contém os dados inválidos para o campo Nome.

Insira nos professores (nome, endereço, contato_no)
Valores ('lina', 'malibag, dhaka', '01790975630');

A seguinte mensagem de erro será exibida para o valor de nome inválido.

Execute a seguinte declaração de inserção que contém o valor vazio para o endereço e contact_no campos e o valor vazio para esses campos é inválido.

Insira nos professores (nome, endereço, contato_no)
Valores ('nilufar rahman', ",");

A seguinte mensagem de erro será exibida para os valores vazios.

Execute a seguinte instrução Select para verificar quais registros são inseridos após o uso do gatilho antes da inserção.

Selecione * dos professores;

A saída a seguir mostra que apenas um registro é inserido após o uso do gatilho.

Exemplo 2: Crie após excluir o gatilho

O gatilho após excluir dispara após excluir qualquer registro da tabela específica. Execute a seguinte instrução SQL para criar uma função nomeada After_Delete () que será usado em um Depois de excluir gatilho para excluir as linhas relacionadas do cursos tabela quando um registro é excluído do professores' mesa. Aqui, um velho.eu ia tem sido usado para rastrear o excluído eu ia de professores' mesa.

Crie função After_Delete ()
Retorna o gatilho como
$$
COMEÇAR
Exclua dos cursos onde professor_id = antigo.eu ia;
Retornar antigo;
FIM;
$$
Idioma PLPGSQL;

A saída a seguir aparecerá se a função for criada com sucesso no PostGres base de dados.

Execute a seguinte instrução SQL para criar um gatilho nomeado delete_teacher que executará o After_Delete () função depois de excluir um registro do professores' tabela que excluirá os registros do cursos Tabela onde o professor_id o valor corresponde ao excluído eu ia valor do professores' mesa.

Crie Trigger Delete_teacher
Depois de excluir
Em professores
Para cada linha
Executar função depois_delete ();

A saída a seguir aparecerá se o gatilho for criado com sucesso.

Execute a seguinte declaração de excluir que excluirá o registro da tabela de professores onde o eu ia O valor é 1. O delete_teacher o gatilho será disparado se algum registro for excluído do professores' mesa.

Excluir dos professores onde id = 1;

A saída a seguir mostra que um registro foi excluído da mesa dos professores. Então o delete_teacher O gatilho será disparado e excluirá todos os registros da tabela de cursos que contém 1 no professor_id campo.

Agora, execute os seguintes comandos selecionados para verificar quais registros são excluídos do professores e cursos mesas.

Selecione * dos professores;
Selecione * nos cursos;

A saída mostra que um registro foi excluído da tabela dos professores e dois registros foram excluídos da tabela de cursos usando o gatilho.

Exemplo 3: Crie em vez de atualizar o gatilho

O gatilho em vez de atualizar pode ser aplicado apenas nas visualizações da tabela. Então, você precisa criar uma visão da tabela e uma função para testar o uso desse tipo de gatilho. Execute a seguinte instrução SQL para criar uma função nomeada insert_course () que atualizará os valores do professores e a cursos tabela depois de inserir um novo recorde para o cursos mesa. O objetivo desta função é atribuir um professor para o novo curso se o professor estiver disponível.

Crie ou substitua a função insert_course ()
Retorna o gatilho como
$$
DECLARAR
Tec_id int;
COMEÇAR
Insira em cursos (nome, credit_hour)
Valores (novo.nome, novo.Hora extra);
Selecione ID em TEC_ID entre professores, onde disponível = Limite verdadeiro 1;
Atualize os professores definidos disponíveis = false onde id = tec_id;
Cursos de atualização SET professor_id = tec_id onde professor_id = 0;
Retornar novo;
FIM
$$
Idioma PLPGSQL;

A saída a seguir aparecerá se a função for criada com sucesso no PostGres base de dados.

Execute o seguinte comando SQL para criar uma visão da tabela de cursos.

Criar view courses_view como
Selecione * nos cursos;

A saída a seguir aparecerá se a visualização for criada com sucesso.

Agora, execute a seguinte declaração SQL para criar o instrumento de inserção de gatilho nomeado update_data isso será demitido quando um novo registro for inserido usando o create_view visualizar.

Crie Trigger Update_data
Em vez de inserir em cursos_view
Para cada linha
Executar função insert_course ();

A saída a seguir aparecerá se o gatilho for criado com sucesso.

Execute a seguinte declaração de inserção para inserir um novo registro na tabela de cursos usando Courses_View visualizar.

Insira em Courses_View (nome, Credit_hour)
valores ('Matemática superior', 3.0);

A saída a seguir aparecerá se os dados forem inseridos usando com sucesso a visualização.

Agora, execute as seguintes declarações selecionadas para verificar como os cursos e as tabelas de professores foram modificados depois de inserir um novo registro na tabela de cursos usando a exibição.

Selecione * dos professores;
Selecione * de Courses_View;

A saída a seguir mostra que um novo registro foi inserido na tabela de cursos e o campo disponível do professores' A tabela foi atualizada de "t" para "f", onde o valor de identificação é 3, e esse valor de identificação foi atualizado no cursos Tabela para atribuir este professor para o curso recém -inserido.

Conclusão

Muitas tarefas de banco de dados podem ser realizadas automaticamente usando um gatilho no banco de dados PostGresql. Cada gatilho é executado usando uma função específica. Muitos propósitos de uso de gatilhos foram explicados neste tutorial, criando vários gatilhos com a função. Três tipos diferentes de gatilhos foram criados aqui que ajudarão os novos usuários do PostGresql a conhecer a maneira de criar e usar gatilhos no banco de dados PostGresql.