aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2018-03-20 11:19:41 -0300
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2018-03-20 11:19:41 -0300
commit4dba331cb3dc1b5ffb0680ed8efae847de216796 (patch)
tree1d415d5c202c32c077e3f219c205cc83d8b35291 /src
parent467963c3e9c5ba9a953959f8aebcdd7206188a18 (diff)
downloadpostgresql-4dba331cb3dc1b5ffb0680ed8efae847de216796.tar.gz
postgresql-4dba331cb3dc1b5ffb0680ed8efae847de216796.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/backend/catalog/heap.c3
-rw-r--r--src/backend/commands/indexcmds.c3
-rw-r--r--src/backend/commands/tablecmds.c9
3 files changed, 6 insertions, 9 deletions
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index 3d80ff9e5bb..0497332e9d7 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -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
diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c
index ff40683d066..0a2ab500238 100644
--- a/src/backend/commands/indexcmds.c
+++ b/src/backend/commands/indexcmds.c
@@ -2512,5 +2512,8 @@ IndexSetParentIndex(Relation partitionIdx, Oid parentOid)
recordDependencyOn(&partIdx, &partitionTbl, DEPENDENCY_AUTO);
}
+
+ /* make our updates visible */
+ CommandCounterIncrement();
}
}
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 218224a1563..8f83aa46753 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -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);
}