🧚 ¡Oye! Beekeeper Studio es una GUI de bases de datos rápida, moderna y de código abierto Descarga
17 de julio de 2024 Por Matthew Rathbone

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.

La versión de Beekeeper para Linux tiene el 100% de las funciones, sin recortes ni concesiones.

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."
— Alex K., desarrollador de bases de datos
★★★★★
"He probado muchas GUI de bases de datos, pero Beekeeper logra el equilibrio perfecto entre funciones y simplicidad. Simplemente funciona."
— Sarah M., ingeniera full stack

¿Listo para mejorar tu flujo de trabajo con SQL?

download Descarga gratis