quinta-feira, 21 de agosto de 2014

Log de alterações de registros - PostgreSQL.

Muitas vezes nos deparamos com o sumiço de certos registros importantes e pra piorar a situação esse sumiço nunca tem culpado. Dependendo da situação, precisamos cadastrar o registro novamente e isso pode acabar trazendo consequencias pois um novo registro virá com um novo ID e normalmente não virá com todos os dados originais. Há também o caso do fulano que simplesmente apagou o conteúdo do campo e ninguém sabe o que tinha lá. Uma boa solução para isso é criarmos um log com a cópia do registro antes da atualização ser realizada, quer seja update ou delete.Podemos fazer isso de forma bem simples com uma trigger. O primeiro passo é criarmos uma tabela com a estrutura idêntica a tabela que queremos preservar os dados, vou citar como exemplo o cadastro de clientes.
SELECT: Mostrando o cadastro de clientes
No cadastro de clientes tenho os campos ID, nome, email e telefone. Na tabela que criarei para guardar os registros de alteração, além de ter esses campos, colocarei também o campo data_hora que armazenará quando o registro foi alterado ou excluido e também o campo operacao que irá informar se foi uma operação de exclusão ou alteração.
Criando a tabela de log do cliente
Precisamos criar uma função que pegará o registro atualizado da tabela de cliente (update ou delete) e copie para a tabela de log.
Criando a função que fará o insert no log
Agora que a função existe, vamos criar a trigger que irá disparar a execução da função logo após as operações de insert e delete.
Criação da trigger que chamará a função de inserção
Pronto. Agora, sempre que um usuário alterar ou excluir um registro da tabela cliente, a cópia desse registro irá para a tabela log_cliente. Com isso teremos uma cópia fiel do registro antes da cagad. digo, ação indevida do usuário ter sido executada. Vamos ao teste.
Primeiro eu fiz um select na tabela log_cliente, como eu acabei de criar, ela não tem nada.
Listando a tabela de log. Ainda vazia.
Agora eu listei os registros da tabela cliente. Há dois registros.
Listando o conteúdo da tabela cliente
Vamos apagar o registro cujo ID seja igual a 1, ou seja, o cliente Cleberson. Se olharmos na tabela cliente novamente, veremos que o registro foi realmente apagado.
Apagando um dos registros
Agora vamos ver na tabela log. Além de termos uma cópia do registro, temos a data e hora que a ação foi executada e também qual a ação foi executada, que nesse caso foi um DELETE.
Listando o log. Mostra o registro que foi apagado da tabela cliente.
A grande vantagem é termos o registro pronto para ser restaurado caso seja necessário. A desvantagem é que se a tabela sofre updates com muita frequencia, então a tabela log_cliente irá crescer rapidamente. Como você tem data e hora que foi executado, periodicamente você poderá fazer uma limpeza na tabela de log, deixando as alterações dos ultimos 6 meses ou 1 ano por exemplo.

ESSA DICA FOI RETIRADA DO BLOG DO CLEBERSONSILVA: http://www.clebersonsilva.com.br/

Nenhum comentário:

Postar um comentário