psql:致命:角色连接太多

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

我尝试使用以下命令连接到数据库服务器:

psql -h host_ip -d db_name -U user_name --password

它显示以下行并拒绝连接。

psql: FATAL:  too many connections for role "user_name".

如何关闭活动连接?
我没有数据库的管理员权限。我只是一个普通用户。

sql postgresql connection psql
7个回答
17
投票

从集群的任何数据库内部:

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()
在手册中。

来自 Linux shell

你自己开始了那些其他的联系吗?也许是你的挂字?你应该能够杀死那些(如果你确定这样做没问题的话)。

您可以使用

ps
调查哪些进程可能有问题:

ps -aux
ps -aux | grep psql

如果您确定要终止的进程(最好确定,您确实 想要终止服务器):

kill  123457689 # pid of process here.

或者用

SIGKILL
代替
SIGTERM

kill -9 123457689

9
投票

我是 pgAdmin 的新手,但到目前为止我还没有使用过命令行。我遇到了同样的问题,我发现解决我的问题的最简单方法是简单地删除仪表板中“数据库活动”中列出的进程。

pgAdmin dashboard

(只需点击 PID 左侧的 X)

这有点乏味,因为您必须单独删除每个进程,但这样做应该释放您的可用连接。 希望这有用。


4
投票

您需要连接到您的 postgresql 数据库并运行命令:

ALTER ROLE your_username CONNECTION LIMIT -1;

2
投票

检查

pool_size
这可能是太多或太小本地
psql
设置的设置值。您应该首先检查
pool_size = 10
(如默认)。这应该修复
too_many_connections
.

的错误

0
投票

请检查该用户允许多少个连接,您可以终止该用户的其他连接并重新登录。但最好只增加该用户的连接限制。

此问题主要出现在 PgAdmin 上。似乎这些年来这个问题仍然存在。


0
投票

这将删除除您之外的现有连接:

查询 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();

来自https://stackoverflow.com/a/5408501/13813241(重复)


0
投票

我是因为一个特定的事件才得到这个的。 姜戈开发。我打开了一个 shell 来查询 django 模型。我还运行了开发服务器。我正在使用 elephantsql 进行测试/原型制作。所以它抛出了错误。一旦我退出 django manage.py shell,它就开始工作了。

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