>> 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

Responder a