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()在手册中.
你自己开始其他连接了吗?也许是你的悬挂剧本?你应该能够杀死那些(如果你确定可以这样做).
您可以调查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)
我对 pgAdmin 还很陌生,但到目前为止我还没有使用过命令行。我遇到了同样的问题,我发现解决我的问题的最简单方法是简单地删除仪表板中“数据库活动”中列出的进程。

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