Commande pour lister les comptes utilisateurs PostgreSQL?

89

Il y a createuser& dropusercommandes:

createuser - define a new PostgreSQL user account
dropuser - remove a PostgreSQL user account

Existe-t-il un moyen correspondant de répertorier les comptes d'utilisateurs?

Ces deux commandes ne nécessitent pas que l'utilisateur appelle psqlni comprenne les détails de son utilisation.

CW Holeman II
la source

Réponses:

122

Utilisez la psqlcoquille et:

\deu[+] [PATTERN] tel que:

postgres=# \deu+
      List of user mappings
 Server | User name | FDW Options 
--------+-----------+-------------
(0 rows)

Et pour tous les utilisateurs:

postgres=# \du 
                              List of roles
 Role name  |                   Attributes                   | Member of 
------------+------------------------------------------------+-----------
 chpert.net |                                                | {}
 postgres   | Superuser, Create role, Create DB, Replication | {}

Également comme MySQL, vous pouvez faire:

$ psql -c "\du"
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 chpert    |                                                | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}
 test      |                                                | {}
Golfe Persique
la source
22
depuis le terminal:psql -c '\du'
Frank Henard
5

Pour limiter la sortie au nom d'utilisateur uniquement, procédez comme suit, à partir du psqlshell ou du shell / terminal local,

psql -c "SELECT u.usename AS "User Name" FROM pg_catalog.pg_user u;"

Tandis que la méthode rapide, comme indiqué dans une réponse précédente, affiche 3 colonnes; y compris le nom d'utilisateur , les attributs de la liste des rôles et le membre du ou des groupes de rôles.

psql -c "\du"

Enfin, comme indiqué dans une réponse ultérieure, les commandes PostgreSQL ™ exécutées en arrière-plan pour la \ducommande affichent ces colonnes "par défaut" en appelant:

SELECT u.usename AS "User name",
  u.usesysid AS "User ID",
  CASE WHEN u.usesuper AND u.usecreatedb THEN CAST('superuser, create
database' AS pg_catalog.text)
       WHEN u.usesuper THEN CAST('superuser' AS pg_catalog.text)
       WHEN u.usecreatedb THEN CAST('create database' AS
pg_catalog.text)
       ELSE CAST('' AS pg_catalog.text)
  END AS "Attributes"
FROM pg_catalog.pg_user u
ORDER BY 1;

(ce que psql fait en coulisse quand vous tapez \ du)

La dernière partie a été copiée à partir de la liste de diffusion PostgreSQL .

ILMostro_7
la source
2

Solution SQL qui est normalement faite par psql \ du:

SELECT u.usename AS "User name",
  u.usesysid AS "User ID",
  CASE WHEN u.usesuper AND u.usecreatedb THEN CAST('superuser, create
database' AS pg_catalog.text)
       WHEN u.usesuper THEN CAST('superuser' AS pg_catalog.text)
       WHEN u.usecreatedb THEN CAST('create database' AS
pg_catalog.text)
       ELSE CAST('' AS pg_catalog.text)
  END AS "Attributes"
FROM pg_catalog.pg_user u
ORDER BY 1;

Réf.: Https://www.postgresql.org/message-id/[email protected]

Ismail Yavuz
la source
2

Pour une réponse plus simple ...

Depuis psql:

\du

Depuis le terminal:

psql -c '\du'

Il me aide à se souvenir que d est souvent utilisé pour d Escribe quelque chose et u est pour u SERS.

Suragch
la source