On Mon, Jan 26, 2015 at 7:45 PM, Luiz Carlos L. Nogueira Jr. < [email protected]> wrote:
> Peguei umas idéias na internet e fiz uma auditoria de DDLs > > CREATE SCHEMA audit; > > CREATE TABLE audit.Auditoria ( > Data TIMESTAMP, > Usuario varchar(50) , > Aplicacao varchar(50), > IP varchar(50), > Query varchar(500) > ); > > CREATE OR REPLACE FUNCTION audit.fn_ddl_trigger() > RETURNS event_trigger > LANGUAGE plpgsql > AS $$ > BEGIN > insert into audit.Auditoria > (Data, > Usuario, > Aplicacao, > IP, > Query) > values > (current_timestamp, > session_user, > (SELECT setting FROM pg_settings WHERE name = 'application_name') , > inet_client_addr(), -- client_addr > current_query()); > END; > $$; > > CREATE EVENT TRIGGER ddl_trigger ON ddl_command_start > EXECUTE PROCEDURE audit.fn_ddl_trigger(); > > > Só que queria inserir na tabela Auditoria, o nome da tabela e a ação > executada (DROP, CREATE, etc). > Na versão original essas variáveis aparecem na current_query() mas queria > em colunas separadas. > Quanto à ação executada, é fácil, basta usar a variável TG_TAG (ela vai ter uma string com valores como: 'ALTER TABLE', 'CREATE TABLE', etc.). Já quanto ao nome da tabela, infelizmente não há interface para isso hoje. Você pode tentar fazer um parser do comando, mas isso não é simples e um tanto frágil (o principal motivo é que multi-comandos podem disparar a trigger várias vezes e ainda sim ser visto como o mesmo comando). > Queria também o usuário de SO que executou, > Você pode pegar o usuário conectado ao banco (o que já está fazendo), mas do SO nem faz muito sentido, e se for uma conexão remota? Atenciosamente, -- Matheus de Oliveira Analista de Banco de Dados Dextra Sistemas - MPS.Br nível F! www.dextra.com.br/postgres
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
