Django django.db.utils.OperationalError:致命:剩余连接槽保留用于非复制超级用户连接

Arb*_*ain 9 django postgresql django-models django-views postgresql-9.1

  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
Run Code Online (Sandbox Code Playgroud)

根据 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',
    }
Run Code Online (Sandbox Code Playgroud)

小智 1

我相信这是由于 Django 框架不进行数据库池而发生的。查看 Django 文档(https://docs.djangoproject.com/en/3.2/ref/databases/#transaction-pooling-and-server-side-cursors)我可以找到对用户 pgBouncer 的建议(http://www .pgbouncer.org/)来处理这个问题。