Come si possono collegare gli utenti attivi a un database postgreSQL tramite SQL?


87

Come si possono collegare gli utenti attivi a un database postgreSQL tramite SQL? Questo potrebbe essere l'ID utente o il numero di utenti.

Risposte:


114

(domanda) Non inserire queste informazioni

seleziona * da pg_user ;

o utilizzando la visualizzazione pg_stat_activity :

select * from pg_stat_activity;

Aggiunto:

la vista dice:

Una riga per processo server, che mostra l'OID del database, il nome del database, l'ID del processo, l'OID utente, il nome utente , la query corrente, lo stato di attesa della query, l'ora in cui è iniziata l'esecuzione della query corrente, l'ora in cui è stato avviato il processo e l'indirizzo del client e numero di porta . Le colonne che riportano i dati sulla query corrente sono disponibili a meno che il parametro stats_command_string non sia stato disattivato. Inoltre, queste colonne sono visibili solo se l'utente che esamina la vista è un superutente o lo stesso dell'utente proprietario del processo su cui si sta segnalando.

non puoi filtrare e ottenere queste informazioni? che saranno gli utenti correnti sul database, è possibile utilizzare il tempo di esecuzione iniziale per ottenere tutte le query degli ultimi 5 minuti, ad esempio ...

qualcosa del genere.


2
No, questo è l'elenco degli utenti conosciuti, non il numero attualmente connesso.
Keltia

che ne dici del collezionista di statistiche? (segui il link sul nome della vista)
balexandre

4
@ mm2010: pg_stat_activity: solo utenti attivi. pg_user: elenca tutti gli utenti
Hao

4
Downvoted, answer vaga un po 'e fornisce alcune informazioni che potrebbero fuorviare i lettori futuri, ad esempio, pg_user non è utile per trovare gli utenti attivi connessi a un database PostgreSQL.
Brad Koch

40

Utilizzando le informazioni di balexandre:

SELECT usesysid, usename FROM pg_stat_activity;

2
È possibile aggiungere client_addralla query precedente per ottenere l'IP del client.
fagiani

7

OP ha chiesto utenti collegati a un determinato database :

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

Questo ti dà tutti i tipi di informazioni succose (come altri hanno già detto) come

  • userid (colonna usesysid)
  • nome utente ( usename)
  • nome dell'applicazione client ( appname), se si preoccupa di impostare quella variabile - psqlfa :-)
  • Indirizzo IP ( client_addr)
  • in che stato si trova (un paio di colonne relative allo stato e allo stato di attesa)
  • e il preferito di tutti, il comando SQL corrente in esecuzione ( query)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.