En PostgreSQL * , no puede descartar una base de datos mientras los clientes están conectados a ella.
Al menos, no con la dropdb
utilidad, que es solo una simple envoltura alrededor de DROP DATABASE
la consulta del servidor.
Una solución bastante sólida sigue:
Conéctese a su servidor como superusuario , utilizando psql
u otro cliente. No , no utilizar la base de datos que desea desconectar.
psql -h localhost postgres postgres
Ahora, utilizando el cliente de base de datos simple, puede forzar la caída de la base de datos mediante tres pasos simples:
Asegúrese de que nadie pueda conectarse a esta base de datos. Puede usar uno de los siguientes métodos (el segundo parece más seguro, pero no impide las conexiones de los superusuarios).
/* 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; */
Forzar la desconexión de todos los clientes conectados a esta base de datos, utilizando 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'; */
Descarte la base de datos.
DROP DATABASE mydb;
El paso 1 requiere privilegios de superusuario para el primer método y privilegios de propietario de la base de datos para el segundo. El paso 2 requiere privilegios de superusuario . El paso 3 requiere privilegio de propietario de la base de datos .
* Esto se aplica a todas las versiones de PostgreSQL, hasta la versión 11.