No PostgreSQL * , você não pode eliminar um banco de dados enquanto os clientes estiverem conectados a ele.
Pelo menos, não com o dropdb
utilitário - que é apenas um invólucro simples em torno da DROP DATABASE
consulta ao servidor.
Solução alternativa bastante robusta a seguir:
Conecte-se ao seu servidor como superusuário , usando psql
ou outro cliente. Você não usar o banco de dados que você quer deixar cair.
psql -h localhost postgres postgres
Agora, usando o cliente de banco de dados simples, você pode forçar o descarte do banco de dados usando três etapas simples:
Verifique se ninguém pode se conectar a este banco de dados. Você pode usar um dos seguintes métodos (o segundo parece mais seguro, mas não impede as conexões dos superusuários).
/* Method 1: update system catalog */
UPDATE pg_database SET datallowconn = 'false' WHERE datname = 'mydb';
/* Method 2: use ALTER DATABASE. Superusers still can connect!
ALTER DATABASE mydb CONNECTION LIMIT 0; */
Forçar a desconexão de todos os clientes conectados a esse banco de dados usando pg_terminate_backend
.
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'mydb';
/* For old versions of PostgreSQL (up to 9.1), change pid to procpid:
SELECT pg_terminate_backend(procpid)
FROM pg_stat_activity
WHERE datname = 'mydb'; */
Solte o banco de dados.
DROP DATABASE mydb;
A Etapa 1 requer privilégios de superusuário para o 1º método e privilégios de proprietário do banco de dados para o 2º. A etapa 2 requer privilégios de superusuário . Etapa 3 requer privilégio de proprietário do banco de dados .
* Isso se aplica a todas as versões do PostgreSQL, até a versão 11.