On 24 November 2017 at 10:52, Amit Langote <langote_amit...@lab.ntt.co.jp> wrote: > 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);
Yes, I am thinking about something like that. Thanks. I am also working on your suggestion of moving the convert-to-root-descriptor logic from ExecInsert() to ExecUpdate(). So, in the upcoming patch version, I am intending to include the above two, and if possible, Robert's idea of re-using is_partition_attr() for pull_child_partition_columns(). -- Thanks, -Amit Khandekar EnterpriseDB Corporation The Postgres Database Company