diff options
author | Simon Riggs <simon@2ndQuadrant.com> | 2014-04-06 11:13:43 -0400 |
---|---|---|
committer | Simon Riggs <simon@2ndQuadrant.com> | 2014-04-06 11:13:43 -0400 |
commit | e5550d5fec66aa74caad1f79b79826ec64898688 (patch) | |
tree | 046444c974bf3aa9833545c0b9bbc183c37dbfa1 /src/backend/commands/cluster.c | |
parent | 80a5cf643adb496abe577a1ca6dc0c476d849c19 (diff) | |
download | postgresql-e5550d5fec66aa74caad1f79b79826ec64898688.tar.gz postgresql-e5550d5fec66aa74caad1f79b79826ec64898688.zip |
Reduce lock levels of some ALTER TABLE cmds
VALIDATE CONSTRAINT
CLUSTER ON
SET WITHOUT CLUSTER
ALTER COLUMN SET STATISTICS
ALTER COLUMN SET ()
ALTER COLUMN RESET ()
All other sub-commands use AccessExclusiveLock
Simon Riggs and Noah Misch
Reviews by Robert Haas and Andres Freund
Diffstat (limited to 'src/backend/commands/cluster.c')
-rw-r--r-- | src/backend/commands/cluster.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c index 620f071aafb..4ac1e0b864f 100644 --- a/src/backend/commands/cluster.c +++ b/src/backend/commands/cluster.c @@ -408,10 +408,10 @@ cluster_rel(Oid tableOid, Oid indexOid, bool recheck, bool verbose) /* * Verify that the specified heap and index are valid to cluster on * - * Side effect: obtains exclusive lock on the index. The caller should - * already have exclusive lock on the table, so the index lock is likely - * redundant, but it seems best to grab it anyway to ensure the index - * definition can't change under us. + * Side effect: obtains lock on the index. The caller may + * in some cases already have AccessExclusiveLock on the table, but + * not in all cases so we can't rely on the table-level lock for + * protection here. */ void check_index_is_clusterable(Relation OldHeap, Oid indexOid, bool recheck, LOCKMODE lockmode) @@ -696,10 +696,10 @@ make_new_heap(Oid OIDOldHeap, Oid NewTableSpace, bool forcetemp, * * If the relation doesn't have a TOAST table already, we can't need one * for the new relation. The other way around is possible though: if some - * wide columns have been dropped, AlterTableCreateToastTable can decide + * wide columns have been dropped, NewHeapCreateToastTable can decide * that no TOAST table is needed for the new table. * - * Note that AlterTableCreateToastTable ends with CommandCounterIncrement, + * Note that NewHeapCreateToastTable ends with CommandCounterIncrement, * so that the TOAST table will be visible for insertion. */ toastid = OldHeap->rd_rel->reltoastrelid; @@ -714,7 +714,7 @@ make_new_heap(Oid OIDOldHeap, Oid NewTableSpace, bool forcetemp, if (isNull) reloptions = (Datum) 0; - AlterTableCreateToastTable(OIDNewHeap, reloptions); + NewHeapCreateToastTable(OIDNewHeap, reloptions, lockmode); ReleaseSysCache(tuple); } |