Django django.db.utils.OperationalError: FATAL: 剩余的连接槽是为非复制超级用户连接保留的
Posted
技术标签:
【中文标题】Django django.db.utils.OperationalError: FATAL: 剩余的连接槽是为非复制超级用户连接保留的【英文标题】:Django django.db.utils.OperationalError: FATAL: remaining connection slots are reserved for non-replication superuser connections 【发布时间】:2020-04-26 07:57:23 【问题描述】: File "/usr/local/lib/python3.7/dist-packages/psycopg2/__init__.py", line 126, in connect conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: FATAL: remaining connection slots are reserved for non-replication superuser connections
根据 Postgres 文档,当 Django 与 Postgres DB 建立的连接数超过默认连接限制时,会发生此错误。
我想知道 Django 启动/打开大量与数据库的连接的原因可能是什么。 我想知道我们可以采取哪些最佳做法来防止它出现异常。 如何增加 Postgres 的默认连接限制?#settings.py
DATABASES =
'default':
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'xxxxx',
'USER': 'xxxxx',
'PASSWORD':'xxxxx',
'HOST':'localhost',
'PORT':'5432',
【问题讨论】:
【参考方案1】:我相信这是因为 Django 框架不进行数据库池化。查看 Django 文档 (https://docs.djangoproject.com/en/3.2/ref/databases/#transaction-pooling-and-server-side-cursors) 我可以找到用户 pgBouncer (http://www.pgbouncer.org/) 来处理这个问题的建议。
【讨论】:
Django 不会自行关闭连接?你建议我将CONN_MAX_AGE
的值设置为 60,
是的,这可以解决,但该值必须与 postgresql 配置的最大连接数相同或更低。您可以在 postgres 配置文件中检查和更改此值(postgresql.conf - 通常在 /var/lib/pgsql/以上是关于Django django.db.utils.OperationalError: FATAL: 剩余的连接槽是为非复制超级用户连接保留的的主要内容,如果未能解决你的问题,请参考以下文章