2017-01-31 10 views
0

Я пытаюсь сделать запрос, показывающий пользователей и все роли, которые у них есть. Я уже знаю, как задать вопрос о ролях одного конкретного пользователя:Запрос Postgres о ролях каждого пользователя

SELECT oid, rolname FROM pg_roles WHERE 
pg_has_role('name_of_user', oid, 'member'); 

Любая идея, как это сделать?

+0

добавить http://dba.stackexchange.com/questions/56096/how-to-get-all-roles-that-a- user-is-member-of-including-inherited-role/56104 # 56104 на ваш вопрос в качестве источника вашего запроса, пожалуйста –

ответ

0

запустить psql -E, чтобы увидеть заявления позади мета команд в PSQL:

vao=# \du 
********* QUERY ********** 
SELECT r.rolname, r.rolsuper, r.rolinherit, 
    r.rolcreaterole, r.rolcreatedb, r.rolcanlogin, 
    r.rolconnlimit, r.rolvaliduntil, 
    ARRAY(SELECT b.rolname 
     FROM pg_catalog.pg_auth_members m 
     JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid) 
     WHERE m.member = r.oid) as memberof 
, r.rolreplication 
, r.rolbypassrls 
FROM pg_catalog.pg_roles r 
ORDER BY 1; 
************************** 

            List of roles 
Role name |       Attributes       | Member of 
-----------+------------------------------------------------------------+----------- 
ro  | Cannot login            | {} 
rw  | Cannot login            | {} 
vao  | Superuser, Create role, Create DB, Replication, Bypass RLS | {ro,rw}