Commit 4dba331c authored by Alvaro Herrera's avatar Alvaro Herrera

Fix CommandCounterIncrement in partition-related DDL

It makes sense to do the CCIs in the places that do catalog updates,
rather than before the places that error out because the former ones
fail to do it.  In particular, it looks like StorePartitionBound() and
IndexSetParentIndex() ought to make their own CCIs.

Per review comments from Peter Eisentraut for row-level triggers on
partitioned tables.

Discussion: https://postgr.es/m/20171229225319.ajltgss2ojkfd3kp@alvherre.pgsql
parent 467963c3
......@@ -3298,6 +3298,9 @@ StorePartitionBound(Relation rel, Relation parent, PartitionBoundSpec *bound)
heap_freetuple(newtuple);
heap_close(classRel, RowExclusiveLock);
/* Make update visible */
CommandCounterIncrement();
/*
* The partition constraint for the default partition depends on the
* partition bounds of every other partition, so we must invalidate the
......
......@@ -2512,5 +2512,8 @@ IndexSetParentIndex(Relation partitionIdx, Oid parentOid)
recordDependencyOn(&partIdx, &partitionTbl, DEPENDENCY_AUTO);
}
/* make our updates visible */
CommandCounterIncrement();
}
}
......@@ -864,13 +864,6 @@ DefineRelation(CreateStmt *stmt, char relkind, Oid ownerId,
update_default_partition_oid(RelationGetRelid(parent), relationId);
heap_close(parent, NoLock);
/*
* The code that follows may also update the pg_class tuple to update
* relnumchecks, so bump up the command counter to avoid the "already
* updated by self" error.
*/
CommandCounterIncrement();
}
/*
......@@ -14585,8 +14578,6 @@ ATExecAttachPartitionIdx(List **wqueue, Relation parentIdx, RangeVar *name)
pfree(attmap);
CommandCounterIncrement();
validatePartitionedIndex(parentIdx, parentTbl);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment