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


Answers:


114

(问题)你不知道那个信息吗

选择* from pg_user ;

或使用视图pg_stat_activity

select * from pg_stat_activity;

添加:

视图说:

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

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

这样的事情。


2
不,那是已知用户列表,而不是当前连接的用户列表。
Keltia,

统计收集器如何?(点击视图名称上的链接)
balexandre

4
@ mm2010:pg_stat_activity:仅活动用户。pg_user:列出所有用户

4
不赞成投票的人,回答会有些混乱,并且提供了一些可能会误导未来读者的信息,例如,pg_user对于查找连接到PostgreSQL数据库的活动用户没有用。
布拉德·科赫


7

OP要求连接到特定数据库的用户:

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

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

  • 用户ID(列usesysid
  • 用户名(usename
  • 客户端应用程序名称(appname),如果麻烦设置该变量-- psql:)
  • IP地址(client_addr
  • 它处于什么状态(与状态和等待状态相关的几列)
  • 以及每个人的最爱,当前的SQL命令正在运行(query
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.