W jaki sposób można połączyć aktywnych użytkowników z bazą danych PostgreSQL za pośrednictwem SQL?

87

W jaki sposób można połączyć aktywnych użytkowników z bazą danych PostgreSQL za pośrednictwem SQL? Może to być identyfikator użytkownika lub liczba użytkowników.

Johan Bresler
źródło

Odpowiedzi:

114

(pytanie) Nie dostajesz tych informacji

wybierz * z pg_user ;

lub używając widoku pg_stat_activity :

select * from pg_stat_activity;

Dodany:

widok mówi:

Jeden wiersz na proces serwera, pokazujący identyfikator OID bazy danych, nazwę bazy danych, identyfikator procesu, identyfikator OID użytkownika, nazwę użytkownika , bieżące zapytanie, stan oczekiwania zapytania, czas rozpoczęcia wykonywania bieżącego zapytania, godzinę rozpoczęcia procesu oraz adres klienta i numer portu . Kolumny zawierające dane dotyczące bieżącego zapytania są dostępne, chyba że parametr stats_command_string został wyłączony. Ponadto kolumny te są widoczne tylko wtedy, gdy użytkownik przeglądający widok jest superużytkownikiem lub to ten sam użytkownik, który jest właścicielem procesu, którego dotyczy raport.

nie możesz filtrować i uzyskiwać tych informacji? to będą obecni użytkownicy w Bazie Danych, możesz użyć czasu rozpoczęcia wykonywania, aby uzyskać na przykład wszystkie zapytania z ostatnich 5 minut ...

coś w tym stylu.

balexandre
źródło
2
Nie, to jest lista znanych użytkowników, a nie aktualnie połączony numer.
Keltia
a co z kolektorem statystyk? (kliknij link w nazwie widoku)
balexandre
4
@ mm2010: pg_stat_activity: tylko aktywni użytkownicy. pg_user: lista wszystkich użytkowników
Hao
4
Obniżony, odpowiedź wędruje trochę i dostarcza pewnych informacji, które mogą wprowadzić przyszłych czytelników w błąd, na przykład pg_user nie jest przydatny do znajdowania aktywnych użytkowników podłączonych do bazy danych PostgreSQL.
Brad Koch
40

Korzystanie z informacji Balexandre:

SELECT usesysid, usename FROM pg_stat_activity;
Sven Lilienthal
źródło
2
Możesz dodać client_addrdo powyższego zapytania, aby uzyskać adres IP klienta.
fagiani
7

OP zapytał użytkowników podłączonych do określonej bazy danych :

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

Daje ci to wszelkiego rodzaju soczyste informacje (jak wspominali inni), takie jak

  • identyfikator użytkownika (kolumna usesysid)
  • nazwa użytkownika ( usename)
  • nazwa aplikacji klienta ( appname), jeśli ustawienie tej zmiennej przeszkadza - psqlrobi :-)
  • Adres IP ( client_addr)
  • w jakim jest stanie (kilka kolumn związanych ze stanem i stanem oczekiwania)
  • i ulubione przez wszystkich, aktualnie wykonywane polecenie SQL ( query)
Tom Hundt
źródło