我尝试使用以下命令连接到数据库服务器:
psql -h host_ip -d db_name -U user_name --password
它显示以下行并拒绝连接。
它显示以下行并拒绝连接。
psql: FATAL: too many connections for role "user_name".
如何关闭活动连接?
我没有数据库管理员权限,只是普通用户。
我尝试使用以下命令连接到数据库服务器:
psql -h host_ip -d db_name -U user_name --password
它显示以下行并拒绝连接。
它显示以下行并拒绝连接。
psql: FATAL: too many connections for role "user_name".
如何关闭活动连接?
我没有数据库管理员权限,只是普通用户。
死循环:首先需要连接到数据库。也许您可以作为另一个用户连接?(默认情况下,一些连接被保留给具有 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
superuser_reserved_connections
了吗?Shell命令可以从外部工作。 - Erwin BrandstetterALTER ROLE your_username CONNECTION LIMIT -1;
请检查 pool_size
,这可能设置过大或过小,请在本地的 psql
设置中进行调整。您应该首先使用 pool_size = 10
(如默认设置)进行检查。这应该可以解决 too_many_connections
的错误。
这将会断开除了你的以外的所有现有连接:
查询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();