sql >> Database >  >> RDS >> PostgreSQL

Hoe alle ingeschakelde rollen voor alle gebruikers in PostgreSQL opsommen?

De truc is om een ​​recursieve query te maken over de systeemcatalogusrelaties pg_roles en pg_auth_members :

WITH RECURSIVE membership_tree(grpid, userid) AS (
    -- Get all roles and list them as their own group as well
    SELECT pg_roles.oid, pg_roles.oid
    FROM pg_roles
  UNION ALL
    -- Now add all group membership
    SELECT m_1.roleid, t_1.userid
    FROM pg_auth_members m_1, membership_tree t_1
    WHERE m_1.member = t_1.grpid
)
SELECT DISTINCT t.userid, r.rolname AS usrname, t.grpid, m.rolname AS grpname
FROM membership_tree t, pg_roles r, pg_roles m
WHERE t.grpid = m.oid AND t.userid = r.oid
ORDER BY r.rolname, m.rolname;

Dit geeft een overzicht van alle gebruikers in het systeem met alle overgenomen rollidmaatschappen. Verpak dit zodat dit hulpprogramma altijd bij de hand is.

Groetjes, Patrick



  1. Vindt u rijen met dezelfde waarde in de ene kolom en andere waarden in een andere kolom?

  2. SQL Server-afrondingsfout, verschillende waarden geven

  3. MySQL - case-statement optimaliseren

  4. Hoe de items in de lijst overeenkomstig een bepaald patroon te herschikken?