【问题标题】:How can you get the active users connected to a postgreSQL database via SQL?如何让活动用户通过 SQL 连接到 postgreSQL 数据库?
【发布时间】:2010-10-02 15:39:45
【问题描述】:

如何让活动用户通过 SQL 连接到 postgreSQL 数据库?这可能是用户 ID 或用户数。

【问题讨论】:

    标签: sql postgresql active-users


    【解决方案1】:

    (问题)你没有得到那个信息

    pg_user中选择*;

    或使用视图pg_stat_activity

    select * from pg_stat_activity;
    

    添加:

    视图说:

    每个服务器进程一行,显示数据库 OID、数据库名称、进程 ID、用户 OID、用户名、当前查询、查询的等待状态、当前查询开始执行的时间、时间进程启动的位置,以及客户端的地址和端口号。除非参数 stats_command_string 已关闭,否则报告当前查询数据的列可用。此外,这些列仅在检查视图的用户是超级用户或与拥有所报告进程的用户相同时才可见。

    您不能过滤并获取该信息吗?这将是数据库上的当前用户,您可以使用开始执行时间来获取最近 5 分钟的所有查询...

    类似的东西。

    【讨论】:

    • 不是,那是已知用户的列表,不是当前连接的人数。
    • 统计数据收集器怎么样? (点击视图名称上的链接)
    • @mm2010:pg_stat_activity:仅限活跃用户。 pg_user:列出所有用户
    • 投反对票,答案有点飘忽,并提供了一些可能误导未来读者的信息,例如,pg_user 对于查找连接到 PostgreSQL 数据库的活动用户没有用处。
    【解决方案2】:

    使用 balexandre 的信息:

    SELECT usesysid, usename FROM pg_stat_activity;
    

    【讨论】:

    • 您可以在上面的查询中添加client_addr以获取客户端的IP。
    【解决方案3】:

    OP 询问连接到特定数据库的用户

    -- Who's currently connected to my_great_database?
    SELECT * FROM pg_stat_activity 
      WHERE datname = 'my_great_database';
    

    这会让你得到all sorts of juicy info(正如其他人提到的那样),例如

    • 用户 ID(usesysid 列)
    • 用户名 (usename)
    • 客户端应用程序名称 (appname),如果需要设置该变量 -- psql 会:-)
    • IP 地址 (client_addr)
    • 它处于什么状态(与状态和等待状态相关的几列)
    • 和大家最喜欢的,正在运行的当前 SQL 命令 (query)

    【讨论】:

      猜你喜欢
      • 2016-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      • 2011-07-21
      • 2014-02-14
      • 1970-01-01
      相关资源
      最近更新 更多