【问题标题】:How to list active connections on PostgreSQL?如何列出 PostgreSQL 上的活动连接?
【发布时间】:2015-02-10 16:53:07
【问题描述】:

PostgreSQL 中有一个命令可以选择到给定数据库的活动连接吗?

psql 声明我无法删除我的一个数据库,因为有到它的活动连接,所以我想看看连接是什么(以及来自哪些机器)

【问题讨论】:

标签: sql postgresql database-connection listings


【解决方案1】:

哦,我刚刚在 PostgreSQL 论坛上找到了这个命令:

SELECT * FROM pg_stat_activity;

【讨论】:

  • 如果您想将其限制为仅一个数据库,您可以使用 SELECT * FROM pg_stat_activity WHERE datname = 'dbname';
  • 如何从特定的支持服务获取活动数据库连接?
  • 那么在运行pg_terminate_backend 之后我的应用程序仍然能够对数据库运行查询但我在 pg_Stat_activity 中看不到新连接怎么样?
  • 如果你想让输出更易于阅读,请先运行\x on;
【解决方案2】:

以下将为您提供 postgres DB 中的活动连接/查询-

SELECT 
    pid
    ,datname
    ,usename
    ,application_name
    ,client_hostname
    ,client_port
    ,backend_start
    ,query_start
    ,query
    ,state
FROM pg_stat_activity
WHERE state = 'active';

您可以使用“空闲”而不是活动来获取已执行的连接/查询。

【讨论】:

  • 空闲是否意味着连接处于活动状态?如果我释放连接,它仍然会被列为空闲吗?
  • 是@ShivamKubde,但为“空闲”,并且上面的查询仅显示“活动”连接,因此删除WHERE ... 子句并能够查看哪些连接处于活动状态或空闲状态添加列stateSELECT 子句
  • 嘿,我想了解为什么 PGSQl 会向我抛出以下错误:[2021-04-08 09:52:04] [53300] 致命:抱歉,已经有太多客户了。请问有熟悉这个问题的人吗?
【解决方案3】:
SELECT * FROM pg_stat_activity WHERE datname = 'dbname' and state = 'active';

由于pg_stat_activity 包含所有具有任何状态(idleactive)的数据库的连接统计信息,因此应在查询中包含数据库名称和连接状态以获得所需的输出。

【讨论】:

    【解决方案4】:

    您可以使用 pg_stat_activity 在 Postgres 中检查连接详细信息。您可以应用过滤器来满足您的条件。以下是查询。 参考文献:https://orahow.com/check-active-connections-in-postgresql/

    SELECT * FROM pg_stat_activity WHERE state = 'active';
    
    select * from pg_stat_activity where state = 'active' and datname = 'REPLACE_DB_NAME_HERE';

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      相关资源
      最近更新 更多