terça-feira, 20 de março de 2012

Consultando e eliminando sessões ativas no PostgreSQL

Já mostrei como listar/matar as sessões ativas no oracle, hoje vou mostrar essa mesma funcionalidade acessando o banco de dados PostgreSQL. O sql a seguir lista todas as sessões ativas.

select datname, 
       procpid, 
       usename, 
       application_name, 
       client_addr, 
       client_hostname, 
       backend_start 
  from pg_stat_activity

EDIT:
A coluna procid foi renomeada para pid a partir da versão 9.2 do PostgreSQL

Com a lista de usuário em mãos, podemos optar por "matar" a sessão de algum usuário ativo, para isto basta executar o comando abaixo, substituindo o "procpid' pelo valor retornado da consulta anterior.

select pg_terminate_backend(procpid)

E para eliminar todas as conexões ativas, menos a conexão atual.

SELECT pg_terminate_backend(procpid) 
   FROM pg_stat_activity 
  WHERE procpid <> pg_backend_pid();

5 comentários:

  1. Show sua dica, contudo usando postgresql 9.2 x64/pgAdmin3 (usario postgres) recebo a mensagem de que a coluna procpid nao existe. Se retiro ela da instrução o select funciona perfeitamente. Tenho que fazer alguma configuração extra para visualizar o pid ?

    ResponderExcluir
  2. Compartilhando: resolvi fazer um simples select * from pg_stat_activity e percebi que o nome da coluna mudou de "procpid" para simplesmente "pid". Ao corrigir o nome o restante deu tudo certo.

    ResponderExcluir
  3. Realmente a coluna mudou de nome, acredito que a partir da versão 9.2. Adicionei uma nota ao texto mencionando a alteração.
    Obrigado.

    ResponderExcluir
  4. Vlw pela dica, tava precisando muito disso hehehe... Parabens pela iniciativa.

    ResponderExcluir
  5. Parabéns e obrigado pela dica, não sei porque, mesmo fechando a app, o post ainda reconhece as conexões como ativas... uso post 9.0.5

    ResponderExcluir