Puedes terminar una sesión problemática con la función pg_terminate_backend.
SELECT pg_terminate_backend(PID);
Cómo identificar consultas de larga duración
Antes de terminar una sesión en PostgreSQL, necesitas saber cuál es la sesión que quieres terminar. Para encontrar consultas de larga duración, puedes usar la vista pg_stat_activity y filtrar por las columnas state y query_start.
SELECT pid, usename, state, query, now() - query_start AS duration
FROM pg_stat_activity
WHERE state = 'active'
ORDER BY duration DESC;
Resultado esperado:
| pid | usename | state | query | duration |
|---|---|---|---|---|
| 1236 | appuser | active | UPDATE orders SET status=’paid’; | 00:20:34 |
| 1234 | postgres | active | SELECT * FROM users; | 00:05:12 |
Cómo terminar una sesión
Una vez que identifiques la sesión problemática, puedes terminarla con la función pg_terminate_backend.
SELECT pg_terminate_backend(1236);
Este comando termina a la fuerza la conexión con el backend. Envía una señal SIGTERM al proceso y le permite terminar de forma segura, dándole una última oportunidad de hacer limpieza antes de cerrarse. Antes de ejecutar este comando, asegúrate de revisar qué tipo de consultas se están ejecutando y analiza el resultado.
Cómo automatizar la terminación de sesiones
En entornos donde los problemas con sesiones son frecuentes, puedes automatizar la terminación de sesiones con un script. Este es un ejemplo de un script básico para terminar consultas de larga duración:
DO $$
DECLARE
r RECORD;
BEGIN
FOR r IN
SELECT pid
FROM pg_stat_activity
WHERE state = 'active'
AND now() - query_start > interval '10 minutes'
LOOP
PERFORM pg_terminate_backend(r.pid);
END LOOP;
END $$;
Este script terminará cualquier sesión activa que lleve más de 10 minutos en ejecución.
Cómo usar la función pg_cancel_backend
A veces no conviene terminar una sesión, sino simplemente cancelar la consulta que está ejecutando. En esos casos, puedes usar la función pg_cancel_backend.
SELECT pg_cancel_backend(PID);
Reemplaza PID con el ID de proceso de la sesión que tiene la consulta que quieres cancelar.
Este comando envía una señal SIGINT al proceso para cancelar la consulta. Es menos drástico que pg_terminate_backend y permite que la sesión siga activa, aunque la consulta en ejecución se cancele.
Recuerda que tanto pg_cancel_backend como pg_terminate_backend requieren acceso de superusuario. Si la sesión que intentas terminar o cancelar pertenece a un superusuario, necesitarás privilegios de superusuario para ejecutar estos comandos correctamente.
Conclusión
Ahora ya sabes cómo terminar sesiones en PostgreSQL. Administrar sesiones en PostgreSQL es una habilidad importante para los administradores de bases de datos. Al identificar y terminar de forma eficaz las sesiones problemáticas, puedes mantener mejor el rendimiento y la confiabilidad de tus bases de datos PostgreSQL. Recuerda usar estos comandos con prudencia, ya que un mal uso puede interrumpir pasos importantes del procesamiento de datos y comprometer la integridad de tus bases de datos PostgreSQL.
Otras publicaciones que te pueden gustar:
Beekeeper Studio es un cliente de bases de datos gratuito y de código abierto
La mejor herramienta de consultas y edición de SQL que he usado. Tiene todo lo que necesito para administrar mi base de datos. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio es rápido, intuitivo y fácil de usar. Es compatible con muchísimas bases de datos y funciona de maravilla en Windows, Mac y Linux.
Lo que dicen los usuarios de Beekeeper Studio
"Beekeeper Studio reemplazó por completo mi antiguo flujo de trabajo con SQL. Es rápido, intuitivo y hace que trabajar con bases de datos vuelva a ser agradable."
"He probado muchas GUI de bases de datos, pero Beekeeper logra el equilibrio perfecto entre funciones y simplicidad. Simplemente funciona."