¿Comando para enumerar las cuentas de usuario de PostgreSQL?

89

Hay createusery dropusercomandos:

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

¿Existe una forma correspondiente de enumerar las cuentas de usuario?

Estos dos comandos no requieren que el usuario invoque psqlni entienda los detalles de su uso.

CW Holeman II
fuente

Respuestas:

122

Usa el psqlcaparazón y:

\deu[+] [PATTERN] como:

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

Y para todos los usuarios:

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

También, como MySQL, puede hacer:

$ psql -c "\du"
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 chpert    |                                                | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}
 test      |                                                | {}
Golfo pérsico
fuente
22
desde la terminal:psql -c '\du'
Frank Henard
5

Para limitar la salida solo al nombre de usuario, simplemente haga lo siguiente desde el psqlshell o desde el shell / terminal local como

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

Mientras que el método rápido, como se señaló en una respuesta anterior, muestra 3 columnas; incluidos el nombre de usuario , la lista de atributos de roles y el miembro de los grupos de roles.

psql -c "\du"

Finalmente, como se señaló en una respuesta posterior, los comandos PostgreSQL que se ejecutan en segundo plano para el \ducomando muestran esas columnas "predeterminadas" llamando a:

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;

(lo que hace psql detrás de escena cuando escribe \ du)

La última parte se copió de la lista de correo de PostgreSQL .

ILMostro_7
fuente
2

Solución SQL que normalmente realiza 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;

Ref: https://www.postgresql.org/message-id/[email protected]

Ismail Yavuz
fuente
2

Para una respuesta más simple ...

Desde dentro de psql:

\du

Desde la terminal:

psql -c '\du'

Me ayuda a recordar que d es de uso frecuente d ESCRIBE algo y U es para u Sers.

Suragch
fuente