psql:致命:角色连接太多

use*_*661 9 sql postgresql connection psql

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

psql -h host_ip -d db_name -U user_name --password
Run Code Online (Sandbox Code Playgroud)

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

psql: FATAL:  too many connections for role "user_name".
Run Code Online (Sandbox Code Playgroud)

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

Erw*_*ter 13

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

Catch 22:您需要先连接到数据库.也许你可以作为另一个用户连接?

要获取此用户的每个连接的详细信息:

SELECT *
FROM   pg_stat_activity
WHERE  usename = 'user_name';
Run Code Online (Sandbox Code Playgroud)

作为同一用户或超级用户,您可以取消用户的所有(其他)连接:

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

更好的是确保它可以这样做.您不希望以这种方式终止重要查询.

pg_cancel_backend()pg_terminate_backend()在手册中.

来自Linux shell

你自己开始其他连接了吗?也许是你的悬挂剧本?你应该能够杀死那些(如果你确定可以这样做).

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

ps -aux
ps -aux | grep psql
Run Code Online (Sandbox Code Playgroud)

如果您发现一个进程杀死(最好是肯定的,你就不会想杀死服务器):

kill  12457689 # pid of process here.
Run Code Online (Sandbox Code Playgroud)

或者SIGKILL代替SIGTERM:

kill -9 12457689
Run Code Online (Sandbox Code Playgroud)


Chr*_*yer 7

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

pgAdmin 仪表板

(只需单击PID左侧的X)

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