Em 11/05/2012 15:30, Alessandro Lima escreveu:
> Tenho um aplicação web java + jdbc + postgresql 8.4
> Criei uma trigger para registrar log de qualquer alteração em certa 
> tabela.
> Mas não encontrei uma forma registrar o usuario neste log, pois o 
> usuario da aplicação é diferente do usuario do banco de dados,
> alias todos os usuarios da aplicação utilizam o mesmo usuario do postgres.
>
> Existe alguma forma de passar o usuario como parametro junto com 
> INSERT, UPDATE, DELETE?
> Estou utilizando uma gambiarra, adicionando o codigo do usuario no 
> final do sql na forma de comentario, exemplo: "delete from tabela 
> where codigo = 1 --usuario:2"
>
Prezado Alessandro,

Tive o mesmo problema, todos os usuários acessando o banco com o mesmo 
usuário do banco.

Depois de me bater muito atras de uma solução resolvi fazer uma tabela q 
no log da aplicação insere um registro com o nome do usuário na 
aplicação e o ID do processo:

CREATE TABLE senda.sis_01_08_a6
(
   procpid integer,
   usuario_banco character varying(60) DEFAULT "current_user"(),
   tp_acesso integer,
   usuario character varying(60) DEFAULT "current_user"(),
   dt_inicio timestamp without time zone DEFAULT now(),
   dt_fim timestamp without time zone DEFAULT now(),
   id serial NOT NULL,
   versao_app character varying(60) DEFAULT '0022011'::character varying,
   CONSTRAINT sis_01_08_a6_id_pkey PRIMARY KEY (id)
);

aí criei uma função q recupera o usuário pelo PID:

CREATE OR REPLACE FUNCTION senda.current_user_pid()
   RETURNS character varying AS
$BODY$
   SELECT COALESCE((SELECT usuario FROM senda.sis_01_08_a6
   WHERE procpid  = pg_backend_pid() ORDER BY id DESC LIMIT 
1),CAST(CURRENT_USER AS VARCHAR));
$BODY$
   LANGUAGE sql VOLATILE;

Coloquei como default do campo usuario.

Já tá no ar a 3 anos e nunca tive problemas, o unico cudado: após algum 
tempo o procpid se repete,
então tem q apagar a acesso mais antigo com o mesmo codigo.

Espero ter ajudado em alguma coisa.

-- 
Irineu Raymundo
Programador/Consultor Técnico
Senda Engenharia de Dados Ltda.

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a