Bom dia, Eu costumo utilizar uma trigger que registra todos os campos de todas as alterações (insert, update, delete), bem como a data, query, operação e usuário.
# criar plpgsql se já não existir: create language plpgsql; # criar função que executará o log: create or replace function log_tabela_a() returns trigger as $$ begin if TG_OP = 'INSERT' or TG_OP = 'UPDATE' then insert into tabela_b(data_log,operacao_log,query_log,user_log,campo1,campo2,etc) values (now(), TG_OP, current_query(), current_user, new.campo1, new.campo2, new.etc); return new; elseif TG_OP = 'DELETE' then insert into tabela_b(data_log,operacao_log,query_log,user_log,campo1,campo2,etc) values (now(), TG_OP, current_query(), current_user, old.campo1, old.campo2, old.etc); return old; end if; exception when others then raise warning 'LOG EXCEPTION (tabela_b) %; %',SQLERRM,current_query(); if TG_OP = 'INSERT' or TG_OP = 'UPDATE' then return new; elseif TG_OP = 'DELETE' then return old; end if; end; $$ language plpgsql; # criar trigger que executará a função acima: create trigger log_tabela_a before insert or update or delete on tabela_a for each row execute procedure log_tabela_a(); --------------- Agora se você deseja filtrar apenas os campos que realmente são alterados você pode utilizar o recurso abaixo: if new.campo1 <> old.campo1 then insert into tabela_b(campo) values(new.campo); end if Atenciosamente, Alessandro Lima [email protected]
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
