2009/7/9 Rubens José Rodrigues <[email protected]>

>  Pessoal,
>
> Temos uma ferramenta de monitoramento de usuários, Jobs etc... (hoje
> funcionando em Oracle) e estamos migrando-as para o PostgreSQL, bom vieram
> algumas dúvidas.
>
Interessante?? Será uma ferramenta GPL??? ;)


> <corte>
>
> a) Vimos e implementamos a função nativa pg_cancel_backend(pid), que
> finaliza a query solicitada (pid), mas em algumas oportunidades vimos que o
> mesmo pid após “morto” continuava aparecendo na pg_stat_activity, locks.
> Então creio ser algum erro em nossa abordagem, será isto?
>
Creio que você esteja confundindo a funcionalidade do "pg_cancel_backend"
[1] porque ela não _destrói_ o processo, somente cancela a execução da query
que estiver sendo executada naquele momento.

O que você procura é o "pg_terminate_backend" [2] mas que está disponivel,
nativamente, apartir da versão 8.4 do PostgreSQL, ou você pode criar essa
funcão usando a dica do wiki do PostgreSQL em [3].


b) Qual a melhor forma de finalizar (aka “matar” a sessão) um usuário quer
> seja por time out quer seja por necessidade? É possível ao implementar
> observar se, existir transação não comitada ele esperar a comitação e em
> seguida “derrubar” o usuário?
>
Eu particularmente uso o pg_cancel_backend para cancelar uma query
"pendurada" (que está demorando muito) e quanto preciso derrubar a sessao
mesmo uso o pg_terminate_backend (uso o Snippet [3]) ou se nao um kill -15
no processo também resolve.

E para listar as sessoes abertas que tem transacao em andamento e nao
finalizadas eu consegui fazendo assim:

select * from pg_stat_activity where current_query ~ 'in transaction' and
procpid <> pg_backend_pid();

Se alguém tiver outra alternativa...

[1] http://www.postgresql.org/docs/8.3/interactive/functions-admin.html
[2] http://www.postgresql.org/docs/8.4/interactive/functions-admin.html
[3] http://wiki.postgresql.org/wiki/Backend_killer_function
-- 
Fabrízio de Royes Mello
>> Blog sobre PostgreSQL: http://fabriziomello.blogspot.com
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a