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
