Perintah untuk mencantumkan akun pengguna PostgreSQL?

88

Ada createuser& dropuserperintah:

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

Apakah ada cara yang sesuai untuk mendaftar akun pengguna?

Kedua perintah ini tidak mengharuskan pengguna untuk memohon psqlatau memahami detail penggunaannya.

CW Holeman II
sumber

Jawaban:

121

Gunakan psqlshell dan:

\deu[+] [PATTERN] seperti:

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

Dan untuk semua pengguna:

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

Juga seperti MySQL, Anda dapat melakukan:

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

Untuk membatasi output hanya untuk nama pengguna, cukup lakukan hal berikut baik dari psqlshell atau dari shell / terminal lokal sebagai

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

Sementara metode cepat, sebagaimana ditunjukkan dalam jawaban sebelumnya, menampilkan 3 kolom; termasuk Nama Pengguna , Daftar Atribut Peran , dan Anggota grup peran.

psql -c "\du"

Akhirnya, seperti yang ditunjukkan dalam jawaban berikutnya, perintah PostgreSQL berjalan di latar belakang untuk \duperintah tersebut yang memperlihatkan kolom "default" tersebut dengan memanggil:

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;

(apa yang dilakukan psql di belakang layar saat Anda mengetik \ du)

Bagian terakhir disalin dari Mailing List PostgreSQL .

ILMostro_7
sumber
2

Solusi SQL yang biasanya dilakukan oleh 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
sumber
2

Untuk jawaban yang lebih sederhana ...

Dari dalam psql:

\du

Dari terminal:

psql -c '\du'

Ini membantu saya untuk mengingat bahwa d sering digunakan untuk d escribe sesuatu dan u adalah untuk u sers.

Suragch
sumber