>> Quando o usuário se loga no sistema incluímos um registro em um tabela
>> chamada sessoes, registrando o código do usuário na aplicação e o
>> pg_backend_pid() da sessão.
>>
>
> Você quer dizer que associa o id do usuário do seu sistema com o pid da
> sessão que o usuário está conectado? É isso?
>
>>
>> Assim quando precisamos saber, usamos a View abaixo para recuperar o
>> usuário da sessão atual.
>>
>
>
>> Funciona certinho, o porém é que as vezes ficam registros perdidos na
>> tabela, se o sistema não for encerrado corretamente (quando fecha o sistema,
>> o registro é excluído).
>>
>>
>> CREATE OR REPLACE VIEW vw_sessao AS
>> SELECT sessoes.usr_usuario
>> FROM sessoes
>> WHERE sessoes.usr_sessao = pg_backend_pid();
>>
>>
>>
Interessante a solução... aqui na empresa usamos "tabelas temporárias" para
guardar informações da aplicação durante a sessão do PostgreSQL, são um
conjunto de pl/pgsql que fazem essa "jogada":
fc_startsession();
fc_putsession(text, text);
fc_getsession(text);
Com isso ao realizar a conexão com o PostgreSQL, nossa aplicação
imediatamente roda a "fc_startsession" e faz uma cópia do conteúdo da
variável $_SESSION (usamos PHP) para dentro da "sessão do banco", e com isso
toda informação que manipulamos em sessão a nível de aplicação fica
disponível tb no banco de dados.
Essas pls são simples, consistem em manipular pares de Chave/Valor...
inclusive estamos testando uma forma de não usar tabelas temporárias para
eliminar esse overhead.
Veja abaixo o exemplo do uso:
postg...@teste_sessao=# SELECT fc_startsession();
fc_startsession
-----------------
t
(1 row)
postg...@teste_sessao=# SELECT fc_putsession('Id_Usuario', '1');
fc_putsession
---------------
t
(1 row)
postg...@teste_sessao=# SELECT fc_getsession('Id_Usuario');
fc_getsession
---------------
1
(1 row)
postg...@teste_sessao=# SELECT fc_putsession('Id_Usuario', '2');
fc_putsession
---------------
t
(1 row)
postg...@teste_sessao=# SELECT fc_getsession('Id_Usuario');
fc_getsession
---------------
2
(1 row)
Algo bem simples e extremamente útil, que já temos em produção em diversos
clientes há mais de 3 anos.
--
Fabrízio de Royes Mello
>> Blog sobre TI: http://fabriziomello.blogspot.com
>> Perfil Linkedin: http://br.linkedin.com/in/fabriziomello
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral