aparentemente você não desconecta. Usando
db.close_connection()
após o término da consulta ajudaria. Além disso, se eu acertar CONN_MAX_AGE
para algum valor curto poderia ajudar. E considere usar algum pooler de sessão, por exemplo, pgbouncer para conexões django. Dessa forma, se você tiver muitas conexões, ele aguardará (ou reutilizará o anterior, dependendo da configuração) em vez de abortar a execução com erro ... atualizar :explicação por que eu proponho
de documentos
Então, se você tiver mais threads, postgres
max_connections
, você obtém o erro mencionado. Cada thread pode reutilizar a conexão se CONN_MAX_AGE não tiver passado. Sua configuração é 0, portanto, a conexão deve ser fechada após a conclusão da consulta, mas você vê 100 conexões ociosas. Então eles não estão fechando. O grande número de conexões significa que elas também não são reutilizadas (lógica:se você tivesse 100 consultas paralelas, elas não ficariam todas ociosas, e se você tiver tantas, elas não serão reutilizadas - abrindo novas). Então eu acho que o django não os fecha como prometido - então CONN_MAX_AGE definido como 0 não funciona no seu código. Então proponho usar db.close_connection()
forçar a desconexão e configurar CONN_MAX_AGE para algum valor pequeno pode mudar o comportamento.