aparentemente no te desconectas. Usando db.close_connection()
después de que finalice la consulta ayudaría. Además, si lo hago bien CONN_MAX_AGE
a algún valor corto podría ayudar. Y considere usar algún agrupador de sesiones, por ejemplo, pgbouncer para conexiones django. De esta manera, si tiene demasiadas conexiones, esperará (o reutilizará la anterior, dependiendo de la configuración) en lugar de cancelar la ejecución con un error...
actualizar :explicación por qué lo propongo
Entonces, si tiene más hilos, postgres max_connections
, obtienes el error mencionado. Cada subproceso puede reutilizar la conexión si CONN_MAX_AGE no ha pasado. Su configuración es 0, por lo que la conexión debe cerrarse después de completar la consulta, pero verá 100 conexiones inactivas. Por eso no cierran. La gran cantidad de conexiones significa que tampoco se reutilizan (lógica:si tuviera 100 consultas paralelas, no todas estarían inactivas, y si tiene tantas, no se reutilizarán, abriendo nuevas). Así que creo que Django no los cierra como se prometió, por lo que CONN_MAX_AGE establecido en 0 no funciona en su código. Así que propongo usar db.close_connection()
forzar la desconexión y establecer CONN_MAX_AGE en un valor pequeño puede cambiar el comportamiento.