Matar una sesión/conexión de postgresql
¿Cómo puedo eliminar todas mis conexiones postgresql?
Estoy intentando rake db:drop
pero me sale:
ERROR: database "database_name" is being accessed by other users
DETAIL: There are 1 other session(s) using the database.
Intenté cerrar los procesos que veo en a ps -ef | grep postgres
pero esto tampoco funciona:
kill: kill 2358 failed: operation not permitted
Aceptado
Puedes usar pg_terminate_backend() para cerrar una conexión. Tienes que ser superusuario para utilizar esta función. Esto funciona igual en todos los sistemas operativos.
SELECT
pg_terminate_backend(pid)
FROM
pg_stat_activity
WHERE
-- don't kill my own connection!
pid <> pg_backend_pid()
-- don't kill the connections to other databases
AND datname = 'database_name'
;
Antes de ejecutar esta consulta, debe REVOCAR los privilegios de CONEXIÓN para evitar nuevas conexiones:
REVOKE CONNECT ON DATABASE dbname FROM PUBLIC, username;
Si estás usando Postgres 8.4-9.1 usa procpid en lugar de pid
SELECT
pg_terminate_backend(procpid)
FROM
pg_stat_activity
WHERE
-- don't kill my own connection!
procpid <> pg_backend_pid()
-- don't kill the connections to other databases
AND datname = 'database_name'
;
Tal vez simplemente reinicie postgres
=>sudo service postgresql restart
Con toda la información sobre el proceso en ejecución:
SELECT *, pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE pid <> pg_backend_pid()
AND datname = 'my_database_name';