Preciso de acesso exclusivo a um banco de dados. É possível usar um comando SQL para "desanexar" todos os outros usuários de um banco de dados postgres. Ou talvez fechando todas as outras conexões e obtendo acesso exclusivo.
Isso é para teste de unidade e os testes são executados apenas manualmente, portanto, não há perigo envolvido. Apenas conexões mortas antigas serão afetadas.
Não há outros usuários se conectando a esses bancos de dados unittest.
As velhas conexões mortas vêm do desenvolvimento. Isso acontece o tempo todo quando um teste que está sendo escrito ou falha não sai limpo.
Se alguém também precisar manter outros usuários bloqueados por um tempo depois de desconectá-los em um cenário de produção, consulte a resposta de Scott Marlowe abaixo: https://dba.stackexchange.com/a/6184/2024
Veja também esta pergunta semelhante no dba: Como descartar todas as conexões para um banco de dados específico sem parar o servidor?
Você pode tentar se conectar ao banco de dados como o usuário postgres e executar:
atualizar Uma consulta ainda melhor se livra da subseleção:
O problema aqui é duplo: primeiro você precisa desconectar esses usuários e, segundo, mantê-los fora do servidor. Ao invés de revogar permissões de conexão, eu costumo usar pg_hba.conf para recusar novas conexões de certas máquinas e/ou usuários, então apenas faça um pg_ctl -m parada rápida;pg_ctl start para descartar todas as conexões atuais. Com slony fazendo alterações DDL, isso é praticamente uma necessidade ou você terá impasses em todo o lugar.