我尝试使用以下命令连接到数据库服务器:
psql -h host_ip -d db_name -U user_name --password
它显示以下行并拒绝连接。
psql: FATAL: too many connections for role "user_name".
如何关闭活动连接?
我没有数据库的管理员权限。我只是一个普通用户。
Catch 22:您需要先连接到数据库。也许您可以作为另一个用户连接? (默认情况下,某些连接是为具有
superuser_reserved_connections
设置的超级用户保留的。)
获取该用户每次连接的详细信息:
SELECT *
FROM pg_stat_activity
WHERE usename = 'user_name';
作为相同的用户或作为超级用户,您可以取消用户的所有(其他)连接:
SELECT pg_cancel_backend(pid) -- (SIGINT)
-- pg_terminate_backend(pid) -- the less patient alternative (SIGTERM)
FROM pg_stat_activity
WHERE usename = 'user_name'
AND pid <> pg_backend_pid();
最好确定这样做没问题。您不想以这种方式终止重要的查询(或连接)。
pg_cancel_backend()
和pg_terminate_backend()
在手册中。
你自己开始了那些其他的联系吗?也许是你的挂字?你应该能够杀死那些(如果你确定这样做没问题的话)。
您可以使用
ps
调查哪些进程可能有问题:
ps -aux
ps -aux | grep psql
如果您确定要终止的进程(最好确定,您确实 想要终止服务器):
kill 123457689 # pid of process here.
或者用
SIGKILL
代替SIGTERM
:
kill -9 123457689
我是 pgAdmin 的新手,但到目前为止我还没有使用过命令行。我遇到了同样的问题,我发现解决我的问题的最简单方法是简单地删除仪表板中“数据库活动”中列出的进程。
(只需点击 PID 左侧的 X)
这有点乏味,因为您必须单独删除每个进程,但这样做应该释放您的可用连接。 希望这有用。
您需要连接到您的 postgresql 数据库并运行命令:
ALTER ROLE your_username CONNECTION LIMIT -1;
检查
pool_size
这可能是太多或太小本地psql
设置的设置值。您应该首先检查pool_size = 10
(如默认)。这应该修复 too_many_connections
. 的错误
请检查该用户允许多少个连接,您可以终止该用户的其他连接并重新登录。但最好只增加该用户的连接限制。
此问题主要出现在 PgAdmin 上。似乎这些年来这个问题仍然存在。
这将删除除您之外的现有连接:
查询 pg_stat_activity 并获取您想要杀死的 pid 值,然后向它们发出 SELECT pg_terminate_backend(pid int)。
PostgreSQL 9.2 及以上版本:
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB' -- ← change this to your DB
AND pid <> pg_backend_pid();
PostgreSQL 9.1 及以下版本:
SELECT pg_terminate_backend(pg_stat_activity.procpid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB' -- ← change this to your DB
AND procpid <> pg_backend_pid();
我是因为一个特定的事件才得到这个的。 姜戈开发。我打开了一个 shell 来查询 django 模型。我还运行了开发服务器。我正在使用 elephantsql 进行测试/原型制作。所以它抛出了错误。一旦我退出 django manage.py shell,它就开始工作了。