Si te has encontrado con el error org.postgresql.util.PSQLException: FATAL: sorry, too many clients already
al intentar conectarte a una base de datos PostgreSQL, este artículo te será de gran ayuda.
Causa del Error
Este error ocurre porque se ha excedido el límite permitido de conexiones en la base de datos. Es probable que hayas abierto múltiples conexiones (por ejemplo, Connection conn = myconn.Open();
) y te hayas olvidado de cerrarlas (conn.close()
).
Solución Rápida
Para evitar este problema, asegúrate de incluir el siguiente código en la clase que crea la conexión o en el método que la utiliza:
protected void finalize() throws Throwable {
try {
your_connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
super.finalize();
}
Al incluir este código, la conexión se liberará cuando la clase sea destruida. También puedes usar un bloque finally
en tus métodos para asegurarte de que la conexión se cierre correctamente.
Consultas Útiles
Estas consultas te ayudarán a obtener información importante sobre las conexiones en tu base de datos:
Cantidad máxima de conexiones configuradas:
show max_connections;
Conexiones abiertas actualmente:
SELECT * FROM pg_stat_activity;
Cantidad de conexiones utilizadas actualmente:
SELECT COUNT(*) from pg_stat_activity;
Aumentar el Límite de Conexiones
PostgreSQL permite un máximo de 100 conexiones simultáneas por defecto. Si necesitas más, sigue estos pasos:
- Encuentra tu archivo
postgresql.conf
, normalmente ubicado en la carpetadata/postgresql.conf
. Si no sabes dónde está, ejecuta: SQLSHOW config_file;
- Edita el archivo y busca la línea
max_connections
. - Cambia el valor de
max_connections
a un número mayor, según el límite de tu versión de PostgreSQL. - Reinicia la base de datos para que los cambios surtan efecto.
Para saber el máximo de conexiones que soporta tu servidor, ejecuta:
select min_val, max_val from pg_settings where name='max_connections';
Espero que este artículo te haya sido de ayuda.