Wie können Sie die aktiven Benutzer über SQL mit einer postgreSQL-Datenbank verbinden?

87

Wie können Sie die aktiven Benutzer über SQL mit einer postgreSQL-Datenbank verbinden? Dies kann die Benutzer-ID oder die Anzahl der Benutzer sein.

Johan Bresler
quelle

Antworten:

113

(Frage) Verstehst du diese Informationen nicht?

wähle * aus pg_user ;

oder mit der Ansicht pg_stat_activity :

select * from pg_stat_activity;

Hinzugefügt:

Die Ansicht sagt:

Eine Zeile pro Serverprozess mit Datenbank-OID, Datenbankname, Prozess-ID, Benutzer-OID, Benutzername , aktueller Abfrage, Wartestatus der Abfrage, Zeitpunkt, zu dem die aktuelle Abfrage ausgeführt wurde, Zeitpunkt, zu dem der Prozess gestartet wurde, sowie Adresse und Client-Adresse Portnummer . Die Spalten, die Daten zur aktuellen Abfrage melden, sind verfügbar, sofern der Parameter stats_command_string nicht deaktiviert wurde. Darüber hinaus sind diese Spalten nur sichtbar, wenn der Benutzer, der die Ansicht untersucht, ein Superuser ist oder mit dem Benutzer identisch ist, dem der Prozess gehört, über den berichtet wird.

Können Sie diese Informationen nicht filtern und abrufen? Dies sind die aktuellen Benutzer in der Datenbank. Sie können die Ausführungszeit verwenden, um alle Abfragen der letzten 5 Minuten abzurufen, z.

sowas in der Art.

Balexandre
quelle
2
Nein, das ist die Liste der bekannten Benutzer, nicht die aktuell verbundene Nummer.
Keltia
Wie wäre es mit dem Statistiksammler? (
Folgen Sie
4
@ mm2010: pg_stat_activity: Nur aktive Benutzer. pg_user: Liste aller Benutzer
Hao
4
Downvoted, Antwort wandert ein wenig und liefert einige Informationen, die zukünftige Leser irreführen könnten. Beispielsweise ist pg_user nicht hilfreich, um die aktiven Benutzer zu finden, die mit einer PostgreSQL-Datenbank verbunden sind.
Brad Koch
39

Verwenden der Informationen von balexandre:

SELECT usesysid, usename FROM pg_stat_activity;
Sven Lilienthal
quelle
2
Sie können client_addrdie obige Abfrage ergänzen , um die IP des Clients abzurufen.
Fagiani
5

OP fragte nach Benutzern, die mit einer bestimmten Datenbank verbunden sind :

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

Dies bringt Ihnen alle Arten von saftigen Informationen (wie andere erwähnt haben) wie

  • Benutzer-ID (Spalte usesysid)
  • Nutzername (usename )
  • Client-Anwendungsname ( appname), wenn es stört, diese Variable zu setzen - psqltut :-)
  • IP-Adresse ( client_addr)
  • in welchem ​​Zustand es sich befindet (ein paar Spalten in Bezug auf Status und Wartestatus)
  • und jedermanns Favorit, der aktuelle SQL-Befehl wird ausgeführt ( query)
Tom Hundt
quelle