我最近升级到 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
参数。