Команда для перечисления учетных записей пользователей PostgreSQL?

89

Есть createuser& dropuserкоманды:

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

Есть ли соответствующий способ перечисления учетных записей пользователей?

Эти две команды не требуют от пользователя вызывать psqlили понимать детали его использования.

CW Holeman II
источник

Ответы:

122

Используйте psqlоболочку и:

\deu[+] [PATTERN] такие как:

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

И для всех пользователей:

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

Также, например, MySQL, вы можете сделать:

$ psql -c "\du"
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 chpert    |                                                | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}
 test      |                                                | {}
Персидский залив
источник
22
из терминала:psql -c '\du'
Фрэнк Хенард
5

Чтобы ограничить вывод только именем пользователя, просто сделайте следующее из psqlоболочки или из локальной оболочки / терминала как

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

В то время как быстрый метод, как указано в предыдущем ответе, отображает 3 столбца; включая Имя пользователя , Список атрибутов ролей и Член группы (групп) ролей.

psql -c "\du"

Наконец, как указывалось в последующем ответе, команды PostgreSQL, выполняемые в фоновом режиме для \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;

(что делает psql за кулисами, когда вы печатаете \ du)

Последняя часть была скопирована из списка рассылки PostgreSQL .

ILMostro_7
источник
2

Решение SQL, которое обычно выполняется 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;

Ссылка: https://www.postgresql.org/message-id/1121195544.8208.242.camel@state.g2switchworks.com

Исмаил Явуз
источник
2

Для более простого ответа ...

Из psql:

\du

Из терминала:

psql -c '\du'

Это помогает мне помнить , что d часто используется для d описывать круг что - то и у для ˙U ГКР.

Suragch
источник