如何通过SQL将活动用户连接到postgreSQL数据库?

Joh*_*ler 81 sql postgresql active-users

如何通过SQL将活动用户连接到postgreSQL数据库?这可以是用户ID或用户数.

bal*_*dre 105

(问题)你不知道这些信息

select*from pg_user ;

或使用视图pg_stat_activity:

select * from pg_stat_activity;
Run Code Online (Sandbox Code Playgroud)

添加:

观点说:

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

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

类似的东西.

  • @ mm2010:pg_stat_activity:仅限活跃用户.pg_user:列出所有用户 (4认同)
  • Downvoted,回答稍微徘徊并提供一些可能误导未来读者的信息,例如,pg_user对于查找连接到PostgreSQL数据库的活动用户没有用. (4认同)
  • 不,这是已知用户的列表,而不是当前连接的数量. (2认同)

Sve*_*hal 38

使用balexandre的信息:

SELECT usesysid, usename FROM pg_stat_activity;
Run Code Online (Sandbox Code Playgroud)

  • 您可以将`client_addr`添加到上述查询中以获取客户端的IP. (2认同)

Tom*_*ndt 9

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

-- Who's currently connected to my_great_database?
SELECT * FROM pg_stat_activity 
  WHERE datname = 'my_great_database';
Run Code Online (Sandbox Code Playgroud)

这为您提供了各种多汁的信息(正如其他人所提到的),例如

  • 用户 ID(列usesysid
  • 用户名 ( usename)
  • 客户端应用程序名称 ( appname),如果它麻烦设置该变量 -psql做 :-)
  • IP 地址 ( client_addr)
  • 它处于什么状态(与状态和等待状态相关的几列)
  • 以及每个人的最爱,当前正在运行的 SQL 命令 ( query)