psql:致命:角色连接太多

时间:2014-07-31 12:16:19

标签: sql postgresql connection psql

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

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

显示以下行并拒绝连接。

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

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

4 个答案:

答案 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.

从Linux shell

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

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

ps -aux
ps -aux | grep psql

如果您确定要杀死的进程(更好的确定,想要杀死服务器):

kill  12457689 # pid of process here.

或使用SIGKILL代替SIGTERM

kill -9 12457689

答案 1 :(得分:3)

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

pgAdmin dashboard

(只需单击PID左侧的X)

这很麻烦,因为您必须分别删除每个进程,但是这样做应该释放可用的连接。 希望这是有用的。

答案 2 :(得分:1)

在本地pool_size上检查psql可能太高或太小。首先,您应该使用pool_size = 10(如默认值)进行检查。这样可以解决too_many_connections的错误。

答案 3 :(得分:0)

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

ALTER ROLE your_username CONNECTION LIMIT -1;