Re: Major Version Upgrade failure due to orphan roles entries in catalog
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Álvaro Herrera <alvherre@alvh.no-ip.org>
Cc: Virender Singla <virender.cse@gmail.com>, pgsql-bugs@lists.postgresql.org,
Aniket Jha <aniketkumarj@gmail.com>
Date: 2025-02-20T22:19:34Z
Lists: pgsql-bugs
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Avoid race condition between "GRANT role" and "DROP ROLE".
- 98fc31d64991 18.0 landed
-
Fix pg_dumpall to cope with dangling OIDs in pg_auth_members.
- d850a6600cec 16.9 landed
- ce1475acd5e2 14.18 landed
- 6df3be415cdb 15.13 landed
- 29d75b25b567 18.0 landed
- 16eff4261f46 17.5 landed
- 5302ff95cadd 13.21 landed
-
Ensure that pg_auth_members.grantor is always valid.
- 6566133c5f52 16.0 cited
Attachments
- v1-0001-Avoid-race-condition-between-GRANT-role-and-DROP-.patch (text/x-diff) patch v1-0001
- v1-0002-Fix-pg_dumpall-to-cope-with-dangling-OIDs-in-pg_a.patch (text/x-diff) patch v1-0002
=?utf-8?Q?=C3=81lvaro?= Herrera <alvherre@alvh.no-ip.org> writes: > Hmm, I think fixing the bug as Tom suggests downthread is probably a > good idea, but I think we should in addition change pg_dumpall to avoid > printing a GRANT line if there's no grantee. Maybe turning one of these LEFT > JOINs into a regular inner join is a sufficient fix for that: After looking at this I thought it was worth a little more code to warn about the dangling role OID, instead of just silently ignoring it. Here's a couple of more-polished patches. I'm unsure whether to back-patch the 0001 patch, as it does imply more pg_shdepend entries than we have today, so it's sort of a backdoor catalog change. But we're mostly interested in the transient behavior of having a lock+recheck during entry insertion, so maybe it's fine. 0002 should be back-patched in any case. (BTW, I was distressed to learn from the code coverage report that we have zero test coverage of the hardly-trivial logic in dumpRoleMembership. I didn't try to address that here. I did test this new logic by dint of manually deleting from pg_authid.) regards, tom lane