Na minha opinião é meio complicado você trabalhar com triggers pois
além do desempenho você pode acabar com um grande problema na mão
quando uma dessas triggers der algum problema e você não souber mais
quem está chamando quem.
Não sei como você fez o seu sistema, no nosso caso existe um função que
controla os comando DML, se você tem algo parecido, ou seja um ponto
central (seja uma classe, procedure, pl) que controle os comandos para
você é mais fácil por exemplo criar uma tabela de parâmetro onde você
diria qual tabela iria ter auditoria e a que nível, e a partir daí
programar o seu sistema de controle de escrita para daí sim disparar os
seus Inserts, Updates e Deletes.
Existem outras maneiras de se fazer é claro e triggers até pode ser uma
solução, mas tenha MUITO cuidado com elas.
Abraço,
Fabiano Machado Dias
Andre Lopes escreveu:
Desde já obrigado a ambos, pois deram-me duas ideias.
Realmente não sei muito bem o que adoptar, por agora. Já tenho a base
de dados terminada e não me apetecia mexer muito mais nela, em relação
á auditoria tenho os 3 campos que referi em todas as tabelas.
Com a solução da tabela única fica tudo centralizado, tem o senão de
ser mais difícil fazer SELECT's ao campo DADOS, com a solução de
espelhar todas as tabelas é mais fácil fazer SELECT's, mas vai-me dar
mais um dia de trabalho espelhar todas as tabelas...
Vou pensar neste assunto seriamente enquanto durmo...
Mais uma vez obrigado.
Cumprimentos,
On Sat, Dec 12, 2009 at 12:24 AM, Lucas
Souza <lucassouzadav...@gmail.com>
wrote:
2009/12/11 Tiago Adami <adam...@gmail.com>
> Boas,
>
...
>
> A minha pergunta... Como fazem auditoria a DELETE's?
Oi Andre, vou te passar um exemplo da faculdade :) (foi feito para o
Oracle, mas espero que te de uma ideia e te ajude ;)
CREATE TABLE AUDITORIA (
TABELA VARCHAR2(50) NOT NULL,
DATA DATE NOT NULL,
OPERACAO CHAR(1) NOT NULL,
USUARIO VARCHAR2(50) NOT NULL,
DADOS VARCHAR2(2000) NOT NULL
);
CREATE TRIGGER TRG_AUDIT_EMPREGADO
AFTER DELETE OR INSERT OR UPDATE
ON EMPREGADO
FOR EACH ROW
DECLARE
DADOS VARCHAR2(2000);
BEGIN
IF DELETING THEN
DADOS := 'CÓDIGO : '|| :OLD.CODEMP || ‘ NOME : '|| :OLD.NOME
|| ‘ SALÁRIO : '|| :OLD.SALARIO;
INSERT INTO AUDITORIA VALUES('EMPREGADO',SYSDATE,'D',USER,DADOS);
END IF;
IF INSERTING THEN
DADOS := 'CÓDIGO : '|| :NEW.CODEMP || ‘ NOME : '|| :NEW.NOME
|| ‘ SALÁRIO : '|| :NEW.SALARIO;
INSERT INTO AUDITORIA VALUES('EMPREGADO',SYSDATE,'I',USER,DADOS);
END IF;
IF UPDATING THEN
DADOS := 'CÓDIGO OLD: '|| :OLD.CODEMP || ‘ NOME OLD: '||
:OLD.NOME || ‘ SALÁRIO OLD: '|| :OLD.SALARIO ||
'CÓDIGO NEW: '|| :NEW.CODEMP || ‘ NOME NEW: '|| :NEW.NOME
|| ‘ SALÁRIO NEW: '|| :NEW.SALARIO;
INSERT INTO AUDITORIA VALUES('EMPREGADO',SYSDATE,'U',USER,DADOS);
END
IF;
32
END;
--
Lucas de Souza D'Ávila
Graduando em Sistemas de Informação - CV Lattes: http://lattes.cnpq.br/9245658982061645
http://twitter.com/lucasdsd
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
|