Matar una sesión/conexión de postgresql

Resuelto DanS asked hace 13 años • 25 respuestas

¿Cómo puedo eliminar todas mis conexiones postgresql?

Estoy intentando rake db:droppero 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 postgrespero esto tampoco funciona:

kill: kill 2358 failed: operation not permitted
DanS avatar Feb 25 '11 01:02 DanS
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'
    ;
Frank Heikens avatar Feb 24 '2011 19:02 Frank Heikens

Tal vez simplemente reinicie postgres=>sudo service postgresql restart

Haris Krajina avatar May 13 '2014 21:05 Haris Krajina

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';
Dorian avatar Jan 11 '2017 17:01 Dorian