Comando para listar contas de usuário do PostgreSQL?

88

Existem createuser& dropusercomandos:

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

Existe uma maneira correspondente de listar as contas de usuário?

Esses dois comandos não requerem que o usuário chame psqlnem compreenda detalhes de como usá-lo.

CW Holeman II
fonte

Respostas:

121

Use o psqlshell e:

\deu[+] [PATTERN] tal como:

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

E para todos os usuários:

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

Também como o MySQL, você pode fazer:

$ psql -c "\du"
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 chpert    |                                                | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}
 test      |                                                | {}
PersianGulf
fonte
22
do terminal:psql -c '\du'
Frank Henard
5

Para limitar a saída apenas ao nome de usuário, basta fazer o seguinte no psqlshell ou no shell / terminal local como

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

Enquanto o método rápido, como apontado em uma resposta anterior, exibe 3 colunas; incluindo Nome de usuário , Lista de atributos de função e Membro do (s) grupo (s) de função.

psql -c "\du"

Por fim, como indicado em uma resposta subsequente, os comandos do PostgreSQL executados em segundo plano para o \ducomando mostram essas colunas "padrão" chamando:

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;

(o que o psql faz nos bastidores quando você digita \ du)

A última parte foi copiada da lista de discussão do PostgreSQL .

ILMostro_7
fonte
2

Solução SQL normalmente feita pelo 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]

İsmail Yavuz
fonte
2

Para uma resposta mais simples ...

De dentro do psql:

\du

Do terminal:

psql -c '\du'

Isso me ajuda a lembrar que d é frequentemente usado para d escribe algo e u é para u SERS.

Suragch
fonte