Galera bom dia…
Em primeiro peço desculpas por estar adicionando mais um tópico porém não consegui achar algum que eu pode-se fazer uma pergunta pertinente a esse assunto, porém moderadores se tiver e vcs poderem me encaminhar agradeço.
Então vamos lá.
Na empresa que trabalho estamos querendo implementar a parte de log de ações do usuário, a idéia é bem simples, saber quem,quando e o que alterou de determinada tabela.
Exemplo:
temos a tabela Cliente.
table cliente(
id serial,
nome varchar(150),
idade numeric,
rg varchar (20),
id_usuario numeric
)
temos a tabela log;
table log (
id serial,
data_hora timestamp defaul now(),
nome_campo varchar(50),
nome_tabela varchar(50),
valor_antigo varchar(100),
valor_novo varchar(100),
id_usuario numeric,
usuario_banco varchar(100)
)
então criaria-mos uma trigger para monitorar a tabela cliente em todos os momentos, (Insert,Update,Delete) , a idéia seria criar uma função que verificasse se o dado foi alterado ou não, e se sofreu alteração grava os dados na tabela log.
Segue o exemplo de if dentro da função
if (New.nome <> Old.nome)
insert into log ('nome',TG_RELNAME,old.nome,new.nome,old.id_usuario,current_user)
end if
Tudo bem esse If até que funcionária porém vamos imaginar em produção que as tabelas tem vários campos, e serão monitoradas varias tabelas, logo fica inviável fazer desta forma, o que eu gostaria de saber e se é possível em postgres criar um looping que percorreria os atributos do Record(New) e ai sim faria esse if
Exemplo:
FOR i IN new.camposCount LOOP
if (New.campo<> Old.campo)
insert into log (campo,TG_RELNAME,old.campo,new.campo,old.id_usuario,current_user);
end if;
END LOOP;
Dessa forma ficaria ótimo…
Então se alguém poder me ajudar eu agradeço e muito.
Desde já muito Obrigado.