sql >> Base de Datos >  >> RDS >> PostgreSQL

Matar una sesión/conexión postgresql

Puede usar pg_terminate_backend() para eliminar una conexión. Tienes que ser superusuario para usar esta función. Esto funciona en todos los sistemas operativos de la misma.

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 CONECTAR para evitar nuevas conexiones:

REVOKE CONNECT ON DATABASE dbname FROM PUBLIC, username;

Si usa Postgres 8.4-9.1, use 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'
    ;