Re: [HACKERS] UPDATE of partition key
Robert Haas <robertmhaas@gmail.com>
On Fri, Jan 12, 2018 at 12:23 PM, Amit Khandekar <amitdkhan.pg@gmail.com> wrote: >> (1) if they need it by subplan index, first use >> subplan_partition_offsets to convert it to a per-leaf index > > Before that, we need to check if there *is* an offset array. If there > are no partitions, there is only going to be a per-subplan array, > there won't be an offsets array. But I guess, you are saying : "do the > on-demand allocation only for leaf partitions; if there are no > partitions, the per-subplan maps will always be allocated for each of > the subplans from the beginning" . So if there is no offset array, > just return mtstate->mt_per_subplan_tupconv_maps[subplan_index] > without any further checks. Oops. I forgot that there might not be partitions. I was assuming that mt_per_subplan_tupconv_maps wouldn't exist at all, and we'd always use subplan_partition_offsets. Both that won't work in the inheritance case. > But after that, I am not sure then why is mt_per_sub_plan_maps[] array > needed ? We are always going to convert the subplan index into leaf > index, so per-subplan map array will not come into picture. Or are you > saying, it will be allocated and used only when there are no > partitions ? From one of your earlier replies, you did mention about > trying to share the maps between the two arrays, that means you were > considering both arrays being used at the same time. We'd use them both at the same time if we didn't have, or didn't use, subplan_partition_offsets, but if we have subplan_partition_offsets and can use it then we don't need mt_per_sub_plan_maps. I guess I'm inclined to keep mt_per_sub_plan_maps for the case where there are no partitions, but not use it when partitions are present. What do you think about that? -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
Commits
-
Avoid referencing off the end of subplan_partition_offsets.
- 945f71db8452 11.0 landed
-
Allow UPDATE to move rows between partitions.
- 2f178441044b 11.0 landed
-
Remove useless lookup of root partitioned rel in ExecInitModifyTable().
- dca48d145e0e 11.0 cited
-
Factor error generation out of ExecPartitionCheck.
- 19c47e7c8202 11.0 landed
-
Minor preparatory refactoring for UPDATE row movement.
- ef6087ee5fa8 11.0 landed
-
Simplify and encapsulate tuple routing support code.
- cc6337d2fed5 11.0 landed
-
Avoid coercing a whole-row variable that is already coerced.
- 1c497fa72df7 11.0 landed
-
Use ResultRelInfo ** rather than ResultRelInfo * for tuple routing.
- 60f7c0abef03 11.0 landed
-
Make RelationGetPartitionDispatchInfo expand depth-first.
- 77b6b5e9ceca 11.0 cited
-
Expand partitioned tables in PartDesc order.
- 30833ba154e0 11.0 cited
-
Use a real RT index when setting up partition tuple routing.
- f81a91db4d1c 10.0 cited
-
Fix transition tables for partition/inheritance.
- 501ed02cf6f4 10.0 cited
-
Fix confusion about number of subplans in partitioned INSERT setup.
- 78a030a44196 10.0 cited
-
Prevent BEFORE triggers from violating partitioning constraints.
- 15ce775faa42 10.0 cited
-
Fire per-statement triggers on partitioned tables.
- e180c8aa8caf 10.0 cited
-
Fix reporting of violations in ExecConstraints, again.
- c0a8ae7be392 10.0 cited
-
Don't scan partitioned tables.
- d3cc37f1d801 10.0 cited
-
Allow FDWs to push down quals without breaking EvalPlanQual rechecks.
- 5fc4c26db512 9.6.0 cited