【问题标题】:psql: FATAL: too many connections for rolepsql:致命:角色的连接太多
【发布时间】:2014-09-23 09:11:58
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 联系管理员。如果您没有打开其他连接,那么您必须通过方式或权利关闭它们。

标签: sql postgresql connection psql


【解决方案1】:

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

Catch 22:您需要先连接到数据库。也许您可以以其他用户身份连接? (默认情况下,某些连接是为具有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() and pg_terminate_backend() in the manual.

从 Linux shell

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

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

ps -aux
ps -aux | grep psql

如果您确定要终止的进程(最好确定,您确实想要终止服务器):

kill  123457689 # pid of process here.

或者用SIGKILL代替SIGTERM

kill -9 123457689

【讨论】:

    【解决方案2】:

    检查pool_size,这可能是本地psql 设置上的设置值过多或过小。您应该首先检查pool_size = 10(如默认值)。这应该会修复 too_many_connections 的错误。

    【讨论】:

      【解决方案3】:

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

      (只需点击 PID 左侧的 X)

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

      【讨论】:

        【解决方案4】:

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

        ALTER ROLE your_username CONNECTION LIMIT -1;
        

        【讨论】:

          猜你喜欢
          • 2019-01-01
          • 2015-03-28
          • 2013-02-24
          • 2018-02-18
          • 1970-01-01
          • 2017-03-08
          • 2022-11-11
          相关资源
          最近更新 更多