On Fri, Sep 20, 2024 at 12:37 PM Laurenz Albe <laurenz.albe@xxxxxxxxxxx> wrote: > > But knowing whether DROP ROLE will work, > > w/o invalidating the current transaction, > > seems like something quite useful to know now, no? > > > > I can query pg_auth_members for admin_option, > > but only easily for direct membership. Taking into > > account indirect membership, which I assume applies, > > is exactly why pg_has_role() exists, no? > > That would be a useful addition, yes. I think this already exists. The full list of modes supported by pg_has_role() is listed in convert_role_priv_string(). You can do something like pg_has_role('alice', 'USAGE WITH ADMIN OPTION'). This is not new: it worked in older releases too, but AFAIK it's never been mentioned in the documentation. However, the precise rule for DROP ROLE in v16+ is not just that you need to have ADMIN OPTION on the role. The rule is: 1. You must have ADMIN OPTION on the target role. 2. You must also have CREATEROLE. 3. If the target role is SUPERUSER, you must be SUPERUSER. If I'm not wrong, pg_has_role(..., 'USAGE WITH ADMIN OPTION') will test #1 for you, but not #2 or #3. -- Robert Haas EDB: http://www.enterprisedb.com