Porque está intentando ejecutar dropDb
comando en la base de datos, a la que tiene una conexión abierta.
Según la documentación de postgres:
Esto tiene sentido, porque cuando elimina toda la base de datos, todas las conexiones abiertas que hacen referencia a esa base de datos se vuelven inválidas, por lo que el enfoque recomendado es conectarse a una base de datos diferente y ejecutar este comando nuevamente.
Si se enfrenta a una situación en la que un cliente diferente está conectado a la base de datos y realmente desea eliminar la base de datos, puede desconectar a la fuerza a todos los clientes de esa base de datos en particular.
Por ejemplo, para desconectar a la fuerza todos los clientes de la base de datos mydb
:
Si PostgreSQL <9.2
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb';
Más
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';
Luego, puede conectarse a una base de datos diferente y ejecutar dropDb
comando de nuevo.