Quiero eliminar todas las conexiones (sesiones) que están abiertas actualmente en una base de datos PostgreSQL específica pero sin reiniciar el servidor o desconectar las conexiones a otras bases de datos.
¿Cómo puedo hacer eso?
postgresql
connections
session
Sorin
fuente
fuente
Respuestas:
Aquí está mi respuesta a una pregunta muy similar sobre StackOverflow.
Dependiendo de su versión de postgresql, puede encontrarse con un error, que hace
pg_stat_activity
que omita las conexiones activas de los usuarios descartados. Estas conexiones tampoco se muestran dentro de pgAdminIII.Si está haciendo pruebas automáticas (en las que también crea usuarios), este podría ser un escenario probable.
En este caso, debe volver a consultas como:
fuente
La consulta como esta debería ayudar (suponiendo que la base de datos se llame 'db'):
pid
solía llamarseprocpid
, por lo que si está utilizando una versión de postgres anterior a la 9.2, puede intentar lo siguiente:Sin embargo, debe ser un superusuario para desconectar a otros usuarios.
También podría ser útil
REVOKE CONNECT ON DATABASE FROM PUBLIC
o algo similar, y luegoGRANT
después.fuente
Esto se puede usar para "liberar" una base de datos de las conexiones del cliente, para que, por ejemplo, pueda cambiarle el nombre:
Tenga en cuenta que esto podría causar un comportamiento problemático a sus aplicaciones cliente. Los datos en realidad no deberían estar dañados debido al uso de transacciones.
fuente