¿Cómo se puede conectar a los usuarios activos a una base de datos postgreSQL a través de SQL?

87

¿Cómo se puede conectar a los usuarios activos a una base de datos postgreSQL a través de SQL? Este podría ser el ID de usuario o el número de usuarios.

Johan Bresler
fuente

Respuestas:

114

(pregunta) ¿No recibes esa información en

seleccione * de pg_user ;

o usando la vista pg_stat_activity :

select * from pg_stat_activity;

Adicional:

la vista dice:

Una fila por proceso de servidor, que muestra el OID de la base de datos, el nombre de la base de datos, el ID del proceso, el OID del usuario, el nombre del usuario , la consulta actual, el estado de espera de la consulta, la hora a la que se inició la ejecución de la consulta actual, la hora a la que se inició el proceso y la dirección del cliente y número de puerto . Las columnas que informan datos sobre la consulta actual están disponibles a menos que se haya desactivado el parámetro stats_command_string. Además, estas columnas solo son visibles si el usuario que examina la vista es un superusuario o el mismo usuario que posee el proceso sobre el que se informa.

¿No puedes filtrar y obtener esa información? que serán los usuarios actuales en la base de datos, puede usar el tiempo de ejecución inicial para obtener todas las consultas de los últimos 5 minutos, por ejemplo ...

algo como eso.

balexandre
fuente
2
No, esa es la lista de usuarios conocidos, no el número actualmente conectado.
Keltia
¿Qué tal el recopilador de estadísticas? (siga el enlace en el nombre de la vista)
balexandre
4
@ mm2010: pg_stat_activity: solo usuarios activos. pg_user: lista de todos los usuarios
Hao
4
Votado en contra, la respuesta se desvía un poco y proporciona cierta información que podría engañar a los futuros lectores, por ejemplo, pg_user no es útil para encontrar los usuarios activos conectados a una base de datos PostgreSQL.
Brad Koch
40

Usando la información de balexandre:

SELECT usesysid, usename FROM pg_stat_activity;
Sven Lilienthal
fuente
2
Puede agregar client_addra la consulta anterior para obtener la IP del cliente.
fagiani
7

OP solicitó usuarios conectados a una base de datos en particular :

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

Esto le brinda todo tipo de información jugosa (como otros han mencionado) como

  • userid (columna usesysid)
  • nombre de usuario ( usename)
  • nombre de la aplicación cliente ( appname), si se molesta en establecer esa variable, lo psqlhace :-)
  • Dirección IP ( client_addr)
  • en qué estado se encuentra (un par de columnas relacionadas con el estado y el estado de espera)
  • y el favorito de todos, se está ejecutando el comando SQL actual ( query)
Tom Hundt
fuente