mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-27 08:39:28 +08:00
More cleanup after failed reduced-lock-levels-for-DDL feature.
Turns out that use of ShareUpdateExclusiveLock or ShareRowExclusiveLock to protect DDL changes had gotten copied into several places that were not touched by either of Simon's original patches for the feature, and thus neither he nor I thought to revert them. (Indeed, it appears that two of these uses were committed *after* the reversion, which just goes to show that git merging is no panacea.) Change these places to use AccessExclusiveLock again. If we ever manage to resurrect that feature, we're going to have to think a bit harder about how to keep lock level usage in sync for DDL operations that aren't within the AlterTable infrastructure. Two of these bugs are only in HEAD, but one is in the 9.1 branch too. Alvaro found one of them, I found the other two.
This commit is contained in:
parent
c8e8b5a6e2
commit
5ac5980744
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user