Mostrando postagens com marcador PostgreSQL. Mostrar todas as postagens
Mostrando postagens com marcador PostgreSQL. Mostrar todas as postagens

sábado, 31 de agosto de 2013

Triggers PostgreSQL

Olá, vamos falar hoje sobre Triggers ou Gatilhos.

Irei realizar esse post de acordo com o banco de dados que pertence a este elefante abaixo, espero que vocês saibam de qual banco se trata!

Uma funções de gatilho possui um recurso muito útil quando estamos falando de bancos de dados pois pouco utilizam as Triggers devido a complexidade.

Bom, existem inúmeras formas para se realizar e implementar funções de gatilho. Algumas de uma forma um pouco diferente uns dos outros.

Vamos criar um seguinte exemplo e vamos identificar como funciona os gatilhos no SGBD PostgreSQL.
Sempre uma função de gatilho pode ser criada para executar antes (BEFORE) ou após (AFTER) as consultas INSERT, UPDATE OU DELETE, uma vez para cada registro (linha) modificado ou por instrução SQL. Logo que ocorre um desses eventos do gatilho a função do gatilho é disparada automaticamente para tratar o evento.

No que diz respeito a declaração de um gatilho, para o banco PostgreSQL, sempre devemos atrelar uma FUNÇÃO ao gatilho, enquanto nos demais bancos de dados, o algoritmo a ser executado fica no corpo da declaração do gatilho.

Sintaxe de um TRIGGER em PostgreSQL:





CREATE TRIGGER nome { BEFORE | AFTER } { evento [ OR ... ]
ON  tabela [ FOR [ EACH ] { ROW | STATEMENT } ]
    EXECUTE PROCEDURE
nome_da_funcao ()

Sempre devemos declarar quando a trigger deve ser disparada: antes (BEFORE) ou após (AFTER) um evento (INSERT, UPDATE, DELETE ou SELECT) em determinada tabela, para cada linha (ROW) ou instrução (STATEMENT), e qual função (PROCEDURE) deve ser executada.

Como ficaria no banco de dados:
A tabela de usuários
id
nm_login
ds_senha
fg_bloqueado
nu_tentativa_login
1
hallan
hallan2011
false
0
2
joao
123456
false
0
3
maria
abcd1234
false
2

Vamos usar sempre que um usuário for excluído, guardar as suas informações em uma tabela reserva.

SQL para a criação da tabela de backup:


CREATE TABLE bkp_usuario (
  id integer NOT NULL,
   nm_login character varying,
   ds_senha character varying,
   fg_bloqueado boolean,
   nu_tentativa_login integer,
   data_exclusao timestamp,
   CONSTRAINT pk_bkp_usuario PRIMARY KEY (id)
);


Temos, então, a seguinte tabela, chamada bkp_usuario:
id
nm_login
ds_senha
fg_bloqueado
nu_tentativa_login
data_exclusao

O próximo passo então é criar a função que será disparada toda vez que um usuário for excluído. Apesar de ser um exemplo simples, serve para o entendimento de um gatilho.

Podemos criar, então, a função da seguinte forma:
CREATE OR REPLACE FUNCTION backup_usuario()
RETURNS TRIGGER AS
$$
  BEGIN
    INSERT INTO bkp_usuario
    (id, nm_login, ds_senha, fg_bloqueado, nu_tentativa_login, data_exclusao)
    VALUES
    (OLD.id, OLD.nm_login, OLD.ds_senha,
     OLD.fg_bloqueado, OLD.nu_tentativa_login, NOW() );
    RETURN NEW;
  END;
$$ LANGUAGE plpgsql;

A palavra reservada OLD representa o registro antigo (para o caso de um update ou um delete). No corpo da função, estamos apenas lendo os dados do registro antigo e efetuando um insert na tabela de backup. A função NOW() retorna a data e hora atual do sistema.

Com a função pronta, devemos criar o gatilho que fará ela ser disparada toda vez que ocorrer um comando de DELETE na tabela de usuários.

Devemos criar o gatilho da seguinte forma:
CREATE TRIGGER trigger_usuario AFTER DELETE
    ON usuario FOR EACH ROW

    EXECUTE PROCEDURE backup_usuario();

Nosso gatilho será disparado sempre depois de um comando de exclusão (AFTER DELETE) na tabela de usuário, e para cada linha (FOR EACH ROW) executa a função (EXECUTE PROCEDURE) backup_usuario.

Desta forma, se efetuarmos a seguinte instrução:
Delete from usuario where id=2;

A tabela de usuário ficará da seguinte forma:
id
nm_login
ds_senha
fg_bloqueado
nu_tentativa_login
1
hallan
hallan2011
false
0
3
maria
abcd1234
false
2

E a tabela bkp_usuario ficará da seguinte forma:
id
nm_login
ds_senha
fg_bloqueado
nu_tentativa_login
data_exclusao
2
joao
123456
false
0
2011-11-11 21:01:49.906

Bom acho que deu para entender quando é executado este gatilho somente quando ocorre a exclusão de registro na tabela de usuários. E logo em seguida ele acaba realizando automaticamente o insert na outra tabela backup usuários onde com os registros e a data atuação da execução do gatilho.

Abraço!

sexta-feira, 10 de abril de 2009

Banco de Dados PostgreSQL


Postgres alguem ja ouviu falar dele? é acho que sim, bom eu vou falar um pouco e comentar e que é um dos banco de dados de código aberto e mais avançado do mundo, agora ultimamente foi lançado uma versão do PostgresSQL 8.3 no dia 4 Fevereiro de 2008, Nova York.

O Grupo de Desenvolvimento Global do PostgreSQL com a versão 8.3 possuindo um alto desempenho para projetistas de aplicações, administradores de bancos de dados, e usuários, com mais de 280 melhorias provenientes de dezenas de contribuidores do PostgreSQL de 18 países.

O POSTGRESQL é um Sistema de Gerenciamento de Banco de Dados Objeto-Relacional (SGBDOR) ele foi o pioneiro em muitos conceitos em objeto-relationais que agora estão se tornando disponéveis em algum banco de dados comerciais.

Adquiriu umas novas funcionalidades para desenvolvedores de aplicações como:

  • Suporte ao padrão ANSI SQL/SML, incluindo exportação em XML
  • Busca Textual: nossa ferramenta avançada de busca textual, TSearch2, foi incorporada à distribuição central com administração melhor e novos dicionários e linguagens
  • Suporte a autenticação por GSSAPI e SSPI
  • Novos tipos de dados: UUID, ENUM e matrizes de tipos composto
  • GSSAPI and SSPI authentication support

Ou melhor falando ele "O PostgreSQL ficou bem mais inteligente"

 Copyright © 2008-2010 All Right Reserved - Todos os Direitos Reservados Elder Stroparo