我尝试使用以下命令连接到数据库服务器:
psql -h host_ip -d db_name -U user_name --password
显示以下行并拒绝连接。
psql: FATAL: too many connections for role "user_name".
如何关闭活动连接?
我没有数据库的管理员权限。我只是一个普通用户。
答案 0 :(得分:12)
Catch 22:您需要先连接到数据库。也许你可以作为另一个用户连接?
要获取此用户的每个连接的详细信息,请执行以下操作:
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()
and pg_terminate_backend()
in the manual.
您是否自己开始了其他连接?也许是你的悬挂剧本?你应该能够杀死那些(如果你确定它可以这样做)。
您可以使用ps
调查哪些进程可能有问题:
ps -aux
ps -aux | grep psql
如果您确定要杀死的进程(更好的确定,不想要杀死服务器):
kill 12457689 # pid of process here.
或使用SIGKILL
代替SIGTERM
:
kill -9 12457689
答案 1 :(得分:3)
我是pgAdmin的新手,但是到目前为止,我还没有使用命令行。我遇到了同样的问题,我发现解决该问题的最简单方法是删除仪表板“数据库活动”中列出的进程。
(只需单击PID左侧的X)
这很麻烦,因为您必须分别删除每个进程,但是这样做应该释放可用的连接。 希望这是有用的。
答案 2 :(得分:1)
在本地pool_size
上检查psql
可能太高或太小。首先,您应该使用pool_size = 10
(如默认值)进行检查。这样可以解决too_many_connections
的错误。
答案 3 :(得分:0)
您需要连接到您的postgresql数据库并运行命令:
ALTER ROLE your_username CONNECTION LIMIT -1;