Administrar las conexiones en PostgreSQL es una tarea fundamental para el mantenimiento de las bases de datos. Ya sea por la necesidad de eliminar bases de datos ocupadas o por la resolución de problemas de conectividad intermitente, es esencial comprender cómo interactúa el sistema con los procesos activos.

Gestión de conexiones bloqueadas y terminación de procesos
Suele ocurrir que tras instalar PostgreSQL creamos bases de datos de prueba y, tras un tiempo, deseamos eliminarlas. En PostgreSQL, eliminar una base de datos es sencillo, pero puede ocurrir que se mantengan conexiones sin actividad (IDLE) que impiden realizar esta operación. Para solventarlo, podemos actuar desde el cliente psql utilizando funciones específicas.
Cada conexión a la base de datos tiene asociado un proceso cuya información se almacena en la tabla pg_stat_activity. Para gestionar estos estados, contamos con dos herramientas principales:
- pg_terminate_backend(pid): Permite cerrar o terminar el proceso mismo, lo cual es útil para liberar una base de datos que está siendo bloqueada por conexiones en reposo.
- pg_cancel_backend(pid): Se utiliza para cancelar la orden que se encuentra en ejecución en ese momento, como un bloque de sentencias en un bucle infinito, pero no termina el proceso.
Es importante ser cuidadoso, seleccionar la base de datos correcta y tener en cuenta que, si hay conexiones activas, estas también serán eliminadas a menos que se indique explícitamente lo contrario.
Configuración de conexiones remotas
Por defecto, la configuración permite que el servidor PostgreSQL solo escuche las conexiones procedentes de clientes locales mediante sockets Unix-domain o TCP/IP, limitando el parámetro listen_addresses a localhost.
Para permitir conexiones remotas, es necesario modificar dicho parámetro:
| Configuración | Descripción |
|---|---|
| Dirección IP específica | Permite escuchar únicamente en una IP o nombre de host (ej. 192.168.1.155). |
| Asterisco (*) | Permite escuchar en cualquier dirección IP o nombre de host. |
| 0.0.0.0 | Habilita la escucha en cualquier dirección IPv4. |
| :: | Habilita la escucha para conexiones IPv6. |
Al realizar estos cambios, es crucial quitar la almohadilla (#) que precede a la línea en el archivo de configuración para descomentarla y asegurar que el servidor aplique los cambios.

Diagnóstico de desconexiones intermitentes
En entornos migrados, como a partir de la versión 8.20, es posible observar notificaciones de aplicaciones que indican la falta de conexión a la base de datos. Estos errores suelen carecer de un patrón específico, ocurriendo en diversas pantallas, horarios o con distintos usuarios.
El análisis de estos incidentes muestra casos donde una aplicación se conecta, realiza una consulta y se desconecta con éxito, frente a situaciones donde se reportan fallos con identificadores de proceso (PID) específicos. Por ejemplo, al intentar trabajar con un PID determinado (ej. 17268) y un puerto específico, la operación puede fallar; sin embargo, al reiniciar la sesión, el usuario logra trabajar normalmente utilizando un PID idéntico pero un puerto diferente, lo cual sugiere problemas subyacentes en la gestión del ciclo de vida de la conexión o latencias de red.
tags: #aborted #connecionts #postgresql