Esto caerá conexiones existentes a excepción de la suya:
de consulta pg_stat_activity
y obtener los valores PID se quiere matar, y luego emitir SELECT pg_terminate_backend(pid int)
a ellos.
PostgreSQL 9.2 o superior:
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB'
AND pid <> pg_backend_pid();
PostgreSQL 9.1 y abajo:
SELECT pg_terminate_backend(pg_stat_activity.procpid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB'
AND procpid <> pg_backend_pid();
Una vez desconectado todos los que tendrá que desconectar y emitir el comando DROP DATABASE desde una conexión de otra base de datos, también conocida como la que intentas soltar.
Tenga en cuenta el cambio de nombre de la columna procpid
a pid
. Ver this mailing list thread.
¿En qué versión de PostgreSQL estás? – Kuberchaun
Uso PostgreSQL 8.4 –
Problema: Aunque puede matar las sesiones conectadas a la base de datos, pueden volver a conectarse tan rápido que todavía no puede soltar la base de datos. Afortunadamente, esta publicación muestra cómo bloquear nuevas conexiones, por lo que puede eliminar las conexiones actuales y soltar la base de datos según el plan: http://dba.stackexchange.com/questions/11893/force-drop-db-while-others -may-be-connected –