aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/catalog/toasting.c10
-rw-r--r--src/backend/commands/trigger.c2
-rw-r--r--src/backend/rewrite/rewriteRemove.c4
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);
/*