Eu quero descartar todas as conexões (sessões) atualmente abertas em um banco de dados PostgreSQL específico, mas sem reiniciar o servidor ou desconectar as conexões com outros bancos de dados.
Como eu posso fazer isso?
postgresql
connections
session
sorin
fonte
fonte
Respostas:
Aqui está a minha resposta para uma pergunta muito semelhante no StackOverflow.
Dependendo da sua versão do postgresql, você pode encontrar um erro, o que faz
pg_stat_activity
com que você omita conexões ativas de usuários descartados. Essas conexões também não são mostradas no pgAdminIII.Se você estiver realizando testes automáticos (nos quais também cria usuários), esse pode ser um cenário provável.
Nesse caso, você precisa reverter para consultas como:
fonte
A consulta como essa deve ajudar (assumindo que o banco de dados seja denominado '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.fonte
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 comportamento problemático aos seus aplicativos clientes. Os dados atualmente não devem ser interrompidos devido ao uso de transações.
fonte