Remove duplicates of membership from results of \du - Mailing list pgsql-hackers

From Shinya Kato
Subject Remove duplicates of membership from results of \du
Date
Msg-id 322f8809-4bb7-6e00-c7f5-c0bf6449d29b@oss.nttdata.com
Whole thread Raw
Responses Re: Remove duplicates of membership from results of \du
List pgsql-hackers
Hi, hackers

When executing \du, you can see duplicates of the same role in 'member of'.
This happens when admin | inherit | set options are granted by another role.

---
postgres=# create role role_a login createrole;
CREATE ROLE
postgres=# \du
                                    List of roles
  Role name | Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
  role_a    | Create role                                                
| {}
  shinya    | Superuser, Create role, Create DB, Replication, Bypass RLS 
| {}

postgres=# set role role_a;
SET
postgres=> create role role_b;
CREATE ROLE
postgres=> \du
                                    List of roles
  Role name | Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
  role_a    | Create role                                                
| {role_b}
  role_b    | Cannot login                                               
| {}
  shinya    | Superuser, Create role, Create DB, Replication, Bypass RLS 
| {}

postgres=> grant role_b to role_a;
GRANT ROLE
postgres=> \du
                                       List of roles
  Role name | Attributes                         |    Member of
-----------+------------------------------------------------------------+-----------------
  role_a    | Create role                                                
| {role_b,role_b}
  role_b    | Cannot login                                               
| {}
  shinya    | Superuser, Create role, Create DB, Replication, Bypass RLS 
| {}

postgres=> select rolname, oid from pg_roles where rolname = 'role_b';
  rolname |  oid
---------+-------
  role_b  | 16401
(1 row)

postgres=> select * from pg_auth_members where roleid = 16401;
   oid  | roleid | member | grantor | admin_option | inherit_option | 
set_option
-------+--------+--------+---------+--------------+----------------+------------
  16402 |  16401 |  16400 |      10 | t            | f | f
  16403 |  16401 |  16400 |   16400 | f            | t | t
(2 rows)
---


Attached patch resolves this issue.
Do you think?

Regards,
Shinya Kato




Attachment

pgsql-hackers by date:

Previous
From: Amit Kapila
Date:
Subject: Re: Add two missing tests in 035_standby_logical_decoding.pl
Next
From: "Drouvot, Bertrand"
Date:
Subject: Re: Add two missing tests in 035_standby_logical_decoding.pl