web-dev-qa-db-fra.com

Commande pour lister les comptes utilisateurs PostgreSQL?

Il existe des commandes createuser & dropuser:

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 psql ni ne comprenne les détails de son utilisation.

95
CW Holeman II

Utilisez le shell psql 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 | {}

Aussi 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      |                                                | {}
131
PersianGulf

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

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

Alors que la méthode rapide, comme indiqué dans une réponse précédente, affiche 3 colonnes; y compris Nom d'utilisateur , Liste des attributs des rôles et Membre du groupe (s) de rôles.

psql -c "\du"

Enfin, comme indiqué dans une réponse ultérieure, les commandes PostgreSQL s'exécutent en arrière-plan pour le \du commande affiche 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 fait psql en arrière-plan lorsque vous tapez\du)

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

8
ILMostro_7

Pour une réponse plus simple ...

Depuis psql:

\du

Depuis le terminal:

psql -c '\du'

Cela m'aide à me rappeler que d est souvent utilisé pour d escrire quelque chose et est pour sers.

3
Suragch

Solution SQL qui est normalement effectuée 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]

2
İsmail Yavuz