¿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.

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      |                                                | {}

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 .


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/1121195544.8208.242.camel@state.g2switchworks.com


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.