diff options
-rw-r--r-- | src/backend/catalog/toasting.c | 10 | ||||
-rw-r--r-- | src/backend/commands/trigger.c | 2 | ||||
-rw-r--r-- | src/backend/rewrite/rewriteRemove.c | 4 |
3 files changed, 9 insertions, 7 deletions
diff --git a/src/backend/catalog/toasting.c b/src/backend/catalog/toasting.c index a938c98190e..3a40e8bffc5 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 9fb97548485..a6e7268aa78 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 917bb464933..b9b693cee1d 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); /* |