Django:: ImproperlyConfigured: Пулинг не поддерживает постоянные соединения

Недавно я обновился до версии Django 5.1 и настроил опцию объединения баз данных со следующими параметрами:

DATABASES["default"]["OPTIONS"] = {
    "pool": {"min_size": 2, "max_size": 4, "timeout": 10}
}
DATABASES["default"]["CONN_MAX_AGE"] = None

Однако я столкнулся со следующей ошибкой: ImproperlyConfigured: Pooling doesn't support persistent connections.

Я понимаю, что удаление CONN_MAX_AGE = None решит эту проблему, но мне хотелось бы получить более глубокое понимание этого ограничения. В частности, является ли ограничение на использование постоянных соединений с пулом уникальным для реализации Django, или оно распространяется на PostgreSQL (или другие базы данных) в целом? Кроме того, какие причины лежат в основе этой несовместимости?

Опция пула соединений в Django 5.1 использует psycopg_pool.ConnectionPool для обработки логики пула, и Django не реализует эту логику самостоятельно. Django просто возвращает соединение обратно в этот пул после каждого запроса и оставляет обработку закрытия соединения на него, поскольку предполагается, что этим будет заниматься пул.

Класс ConnectionPool имеет свои собственные опции, которые вы можете настроить с помощью словаря, передаваемого в опцию pool. Если вы хотите получить что-то похожее на CONN_MAX_AGE, вы можете настроить аргумент max_lifetime.

Вернуться на верх