Eu quero descartar todas as conexões (sessões) que estão abertas no momento para um banco de dados PostgreSQL específico, mas sem reiniciar o servidor ou desconectar conexões com outros bancos de dados.
Como eu posso fazer isso?
Eu quero descartar todas as conexões (sessões) que estão abertas no momento para um banco de dados PostgreSQL específico, mas sem reiniciar o servidor ou desconectar conexões com outros bancos de dados.
Como eu posso fazer isso?
A consulta como esta deve ajudar (assumindo que o banco de dados é chamado 'db'):
pid
costumava ser chamadoprocpid
, portanto, se você estiver usando uma versão do postgres anterior à 9.2, tente o seguinte:No entanto, você precisa ser um superusuário para desconectar outros usuários.
Também pode ser útil
REVOKE CONNECT ON DATABASE FROM PUBLIC
ou algo semelhante, eGRANT
depois.Aqui está minha resposta para uma pergunta muito semelhante no StackOverflow.
Dependendo da sua versão do postgresql, você pode encontrar um bug, que
pg_stat_activity
omite conexões ativas de usuários descartados. Essas conexões também não são mostradas dentro do pgAdminIII.Se você estiver fazendo testes automáticos (nos quais você também cria usuários), esse pode ser um cenário provável.
Nesse caso, você precisa reverter para consultas como:
Isso pode ser usado para "liberar" um banco de dados das conexões do cliente, para que você, por exemplo, possa renomeá-lo:
Esteja ciente de que isso pode causar um comportamento problemático em seus aplicativos cliente. Os dados realmente não devem ser corrompidos devido ao uso de transações.