psql:致命:剩余连接槽保留用于非复制超级用户连接

问题描述 投票:0回答:1

我想了解此错误何时发生以及如何解决。我检查了

pg_stat_activity
pg_locks
但无法弄清楚哪个进程正在耗尽连接

我们使用 sqlalchemy 连接到数据库,如下所示

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine_url = f'{dbms}://{username}:{password}@{hostname}:{port}/{database}'

engine = create_engine(engine_url, pool_size=20, max_overflow=10)
Session = sessionmaker(bind=engine)

db_session = Session()

这是 Heroku“psql: FATAL: 剩余连接槽保留用于非复制超级用户连接”的扩展

database postgresql database-connection connection-pooling
1个回答
0
投票

我在 sqlalchemy 引擎 url 的应用程序名称中添加客户端进程 ID。这将存储在

application_name
中的
pg_stat_activity
下,这将有助于调试从哪里打开此连接。

import os
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

client_hostname = os.environ.get('HOSTNAME', 'UNKNOWN')
client_pid = os.getpid()


engine_url = f'{dbms}://{username}:{password}@{hostname}:{port}/{database}?application_name={client_hostname}_{client_pid}'

engine = create_engine(engine_url, pool_size=20, max_overflow=10)
Session = sessionmaker(bind=engine)

db_session = Session()

这显示了连接的来源,并且应用程序名称的限制为64个字符,因此我们可以包含您想要传递给数据库统计信息的任何自定义信息

© www.soinside.com 2019 - 2024. All rights reserved.