ユーザ一覧
pg_userビューを参照する事でユーザ一覧を確認できます。postgreSQLでは「ログイン属性」を保持しているロールをユーザと考えればよいので、pg_rolesをrolcanlogin = trueの条件で参照してもユーザ一覧として取得できます。
ユーザ一覧出力SQL
ユーザ毎にサーチパスを設定する事ができるので以下SQLではサーチパスも出しています。
select u.usesysid,u.usename ,case when u.usesuper='true' then '〇' else '-' end "Super" ,case when u.usecreatedb ='true' then '〇' else '-' end "createDb" ,case when u.userepl ='true' then '〇' else '-' end "repl" ,case when u.usebypassrls ='true' then '〇' else '-' end "passrls" ,search_path from pg_user u left outer join ( select usename,search_path from ( select usename,unnest(useconfig) search_path from pg_user ) t where search_path like '%search%' ) s on u.usename = s.usename order by usesysid ;
ユーザ一覧出力例
usesysid | usename | Super | createDb | repl | passrls | search_path
----------+-------------+-------+----------+------+---------+----------------------------------------
10 | postgres | 〇 | 〇 | 〇 | 〇 |
16384 | sooni | 〇 | - | - | - | search_path="$user", public, prjschema
16397 | udonman | - | - | - | - | search_path="$user", public, prjschema
16440 | online_user | - | - | - | - |
16441 | batch_user | - | - | - | - |
16442 | prjadmin | - | - | - | - |
16827 | kawa | - | - | - | - |
16828 | yama | - | - | - | - |
(8 rows)
myposdb=#
メタコマンドによるユーザ一覧出力
\du
myposdb=# \du
List of roles
Role name | Attributes | Member of
-------------+------------------------------------------------------------+------------
batch_user | | {}
online_user | | {prjadmin}
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
prjadmin | | {}
sooni | Superuser | {}
udonman | | {}
myposdb=#
ユーザ一覧出力SQL(pg_rolesビューから求める)
PostgreSQLのユーザは、「ログイン属性を保持したロール」と言われるのは以下のSQLにて納得できます
SELECT oid,rolname ,case rolsuper when 'true' then '〇' else '×' end as "super" ,case rolinherit when 'true' then '〇' else '×' end as "inherit" ,case rolcreaterole when 'true' then '〇' else '×' end as "createRole" ,case rolcreatedb when 'true' then '〇' else '×' end as "createDb" ,case rolcanlogin when 'true' then '〇' else '×' end as "canLogin" ,case rolreplication when 'true' then '〇' else '×' end as "replication" ,rolconnlimit as "connLimit" FROM pg_roles where rolcanlogin = true order by oid ;
ユーザ一覧出力例(ログイン属性を保持しているロール一覧)
oid | rolname | super | inherit | createRole | createDb | canLogin | replication | connLimit
-------+-------------+-------+---------+------------+----------+----------+-------------+-----------
10 | postgres | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | -1
16384 | sooni | 〇 | 〇 | × | × | 〇 | × | 2
16397 | udonman | × | 〇 | × | × | 〇 | × | -1
16440 | online_user | × | 〇 | × | × | 〇 | × | -1
16441 | batch_user | × | 〇 | × | × | 〇 | × | -1
16442 | prjadmin | × | 〇 | × | × | 〇 | × | -1
16783 | yama | × | 〇 | × | × | 〇 | × | -1
16784 | kawa | × | 〇 | × | × | 〇 | × | -1
(8 rows)
myposdb=#