• Tom Lane's avatar
    Fix misbehavior of DROP OWNED BY with duplicate polroles entries. · d21fca08
    Tom Lane authored
    Ordinarily, a pg_policy.polroles array wouldn't list the same role
    more than once; but CREATE POLICY does not prevent that.  If we
    perform DROP OWNED BY on a role that is listed more than once,
    RemoveRoleFromObjectPolicy either suffered an assertion failure
    or encountered a tuple-updated-by-self error.  Rewrite it to cope
    correctly with duplicate entries, and add a CommandCounterIncrement
    call to prevent the other problem.
    
    Per discussion, there's other cleanup that ought to happen here,
    but this seems like the minimum essential fix.
    
    Per bug #17062 from Alexander Lakhin.  It's been broken all along,
    so back-patch to all supported branches.
    
    Discussion: https://postgr.es/m/17062-11f471ae3199ca23@postgresql.org
    d21fca08
policy.c 38.5 KB