Como você pode conectar os usuários ativos a um banco de dados postgreSQL via SQL?

87

Como você pode conectar os usuários ativos a um banco de dados postgreSQL via SQL? Pode ser o ID do usuário ou o número de usuários.

Johan Bresler
fonte

Respostas:

114

(pergunta) Não coloque essa informação em

select * from pg_user ;

ou usando a visualização pg_stat_activity :

select * from pg_stat_activity;

Adicionado:

a vista diz:

Uma linha por processo do servidor, mostrando OID do banco de dados, nome do banco de dados, ID do processo, OID do usuário, nome do usuário , consulta atual, status de espera da consulta, hora em que a consulta atual começou a execução, hora em que o processo foi iniciado e endereço do cliente e número da porta . As colunas que relatam dados na consulta atual estão disponíveis, a menos que o parâmetro stats_command_string tenha sido desativado. Além disso, essas colunas só são visíveis se o usuário que está examinando a visualização for um superusuário ou o mesmo usuário que possui o processo que está sendo relatado.

você não pode filtrar e obter essas informações? que serão os usuários atuais no banco de dados, você pode usar o tempo de execução de início para obter todas as consultas dos últimos 5 minutos, por exemplo ...

algo parecido.

Balexandre
fonte
2
Não, essa é a lista de usuários conhecidos, não o número atualmente conectado.
Keltia
e o coletor de estatísticas? (siga o link no nome da vista)
balexandre
4
@ mm2010: pg_stat_activity: somente usuários ativos. pg_user: listar todos os usuários
Hao
4
Na votação negativa, a resposta vagueia um pouco e fornece algumas informações que podem enganar futuros leitores, por exemplo, pg_user não é útil para localizar os usuários ativos conectados a um banco de dados PostgreSQL.
Brad Koch
40

Usando as informações de balexandre:

SELECT usesysid, usename FROM pg_stat_activity;
Sven Lilienthal
fonte
2
Você pode adicionar client_addrà consulta acima para obter o IP do cliente.
fagiani
7

O OP solicitou usuários conectados a um banco de dados específico :

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

Isso fornece a você todos os tipos de informações interessantes (como outros mencionaram), como

  • ID do usuário (coluna usesysid)
  • nome de usuário ( usename)
  • nome do aplicativo cliente ( appname), se incomoda em definir essa variável - psqlfaz :-)
  • Endereço IP ( client_addr)
  • em que estado está (algumas colunas relacionadas ao estado e status de espera)
  • e o favorito de todos, o comando SQL atual sendo executado ( query)
Tom Hundt
fonte