Comment pouvez-vous connecter les utilisateurs actifs à une base de données postgreSQL via SQL?

87

Comment pouvez-vous connecter les utilisateurs actifs à une base de données postgreSQL via SQL? Il peut s'agir de l'ID utilisateur ou du nombre d'utilisateurs.

Johan Bresler
la source

Réponses:

114

(question) N'avez-vous pas cette information dans

sélectionnez * dans pg_user ;

ou en utilisant la vue pg_stat_activity :

select * from pg_stat_activity;

Ajoutée:

la vue dit:

Une ligne par processus serveur, indiquant l'OID de la base de données, le nom de la base de données, l'ID du processus, l'OID de l'utilisateur, le nom d'utilisateur , la requête actuelle, l'état d'attente de la requête, l'heure à laquelle la requête en cours a commencé l'exécution, l'heure à laquelle le processus a été démarré et l'adresse du client et numéro de port . Les colonnes qui rapportent des données sur la requête actuelle sont disponibles à moins que le paramètre stats_command_string n'ait été désactivé. De plus, ces colonnes ne sont visibles que si l'utilisateur qui examine la vue est un superutilisateur ou le même que l'utilisateur propriétaire du processus faisant l'objet du rapport.

ne pouvez-vous pas filtrer et obtenir ces informations? ce seront les utilisateurs actuels de la base de données, vous pouvez utiliser le temps d'exécution du début pour obtenir toutes les requêtes des 5 dernières minutes par exemple ...

quelque chose comme ca.

balexandre
la source
2
Non, c'est la liste des utilisateurs connus, pas le nombre actuellement connecté.
Keltia
et le collecteur de statistiques? (suivez le lien sur le nom de la vue)
balexandre
4
@ mm2010: pg_stat_activity: utilisateurs actifs uniquement. pg_user: liste tous les utilisateurs
Hao
4
Downvoté, la réponse erre un peu et fournit des informations qui pourraient induire en erreur les futurs lecteurs, par exemple, pg_user n'est pas utile pour trouver les utilisateurs actifs connectés à une base de données PostgreSQL.
Brad Koch
40

Utilisation des informations de balexandre:

SELECT usesysid, usename FROM pg_stat_activity;
Sven Lilienthal
la source
2
Vous pouvez ajouter client_addrà la requête ci-dessus afin d'obtenir l'adresse IP du client.
fagiani
7

OP a demandé des utilisateurs connectés à une base de données particulière :

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

Cela vous donne toutes sortes d'informations juteuses (comme d'autres l'ont mentionné) telles que

  • userid (colonne usesysid)
  • nom d'utilisateur ( usename)
  • nom de l'application cliente ( appname), si cela dérange de définir cette variable - psqlfait :-)
  • Adresse IP ( client_addr)
  • dans quel état il se trouve (quelques colonnes liées à l'état et à l'état d'attente)
  • et le favori de tout le monde, la commande SQL actuelle étant exécutée ( query)
Tom Hundt
la source