On 2017/11/23 21:57, Amit Khandekar wrote: > If we collect the partition keys in expand_partitioned_rtentry(), we > need to pass the root relation also, so that we can convert the > partition key attributes to root rel descriptor. And the other thing > is, may be, we can check beforehand (in expand_inherited_rtentry) > whether the rootrte's updatedCols is empty, which I think implies that > it's not an UPDATE operation. If yes, we can just skip collecting the > partition keys.
Yeah, it seems like a good idea after all to check in expand_inherited_rtentry() whether the root RTE's updatedCols is non-empty and if so check if any of the updatedCols are partition keys. If we find some, then it will suffice to just set a simple flag in the PartitionedChildRelInfo that will be created for the root table. That should be done *after* we have visited all the tables in the partition tree including some that might be partitioned and hence will provide their partition keys. The following block in expand_inherited_rtentry() looks like a good spot: if (rte->inh && partitioned_child_rels != NIL) { PartitionedChildRelInfo *pcinfo; pcinfo = makeNode(PartitionedChildRelInfo); Thanks, Amit