diff --git a/src/backend/catalog/toasting.c b/src/backend/catalog/toasting.c index a938c98190ee3a27cadaa3e21e994aa11509240b..3a40e8bffc54a1ffb221582c74dd2fe4a5268dab 100644 --- a/src/backend/catalog/toasting.c +++ b/src/backend/catalog/toasting.c @@ -58,11 +58,13 @@ AlterTableCreateToastTable(Oid relOid, Datum reloptions) Relation rel; /* - * Grab a DDL-exclusive lock on the target table, since we'll update the - * pg_class tuple. This is redundant for all present users. Tuple - * toasting behaves safely in the face of a concurrent TOAST table add. + * Grab an exclusive lock on the target table, since we'll update its + * pg_class tuple. This is redundant for all present uses, since caller + * will have such a lock already. But the lock is needed to ensure that + * concurrent readers of the pg_class tuple won't have visibility issues, + * so let's be safe. */ - rel = heap_open(relOid, ShareUpdateExclusiveLock); + rel = heap_open(relOid, AccessExclusiveLock); /* create_toast_table does all the work */ (void) create_toast_table(rel, InvalidOid, InvalidOid, reloptions); diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index 9fb9754848568f9d76635e6337778184187a0793..a6e7268aa78e8204acbe69b5642fc09fca8b4367 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -1038,7 +1038,7 @@ DropTrigger(RangeVar *relation, const char *trigname, DropBehavior behavior, ObjectAddress object; /* lock level should match RemoveTriggerById */ - relid = RangeVarGetRelid(relation, ShareRowExclusiveLock, false, false); + relid = RangeVarGetRelid(relation, AccessExclusiveLock, false, false); object.classId = TriggerRelationId; object.objectId = get_trigger_oid(relid, trigname, missing_ok); diff --git a/src/backend/rewrite/rewriteRemove.c b/src/backend/rewrite/rewriteRemove.c index 917bb4649335c00e70a8a91f9397b14698336caa..b9b693cee1d6773991bf01325c5e556f44f602b7 100644 --- a/src/backend/rewrite/rewriteRemove.c +++ b/src/backend/rewrite/rewriteRemove.c @@ -45,8 +45,8 @@ RemoveRewriteRule(RangeVar *relation, const char *ruleName, Oid owningRel; ObjectAddress object; - /* should match RemoveRewriteRuleById */ - owningRel = RangeVarGetRelid(relation, ShareUpdateExclusiveLock, + /* lock level should match RemoveRewriteRuleById */ + owningRel = RangeVarGetRelid(relation, AccessExclusiveLock, false, false); /*