Re: UPDATE of partition key
Amit Langote <langote_amit_f8@lab.ntt.co.jp>
Attachments
- 0001-Decouple-RelationGetPartitionDispatchInfo-from-execu.patch (text/plain) patch 0001
- 0002-Teach-expand_inherited_rtentry-to-add-partitions-in-.patch (text/plain) patch 0002
On 2017/07/26 6:07, Robert Haas wrote: > On Thu, Jul 13, 2017 at 1:09 PM, Amit Khandekar <amitdkhan.pg@gmail.com> wrote: >> Attached is a WIP patch (make_resultrels_ordered.patch) that generates >> the result rels in canonical order. This patch is kept separate from >> the update-partition-key patch, and can be applied on master branch. > > I suspect this isn't correct for a table that contains wCTEs, because > there would in that case be multiple result relations. > > I think we should always expand in bound order rather than only when > it's a result relation. I think for partition-wise join, we're going > to want to do it this way for all relations in the query, or at least > for all relations in the query that might possibly be able to > participate in a partition-wise join. If there are multiple cases > that are going to need this ordering, it's hard for me to accept the > idea that it's worth the complexity of trying to keep track of when we > expanded things in one order vs. another. There are other > applications of having things in bound order too, like MergeAppend -> > Append strength-reduction (which might not be legal anyway if there > are list partitions with multiple, non-contiguous list bounds or if > any NULL partition doesn't end up in the right place in the order, but > there will be lots of cases where it can work). Sorry to be responding this late to the Amit's make_resultrel_ordered patch itself, but I agree that we should teach the planner to *always* expand partitioned tables in the partition bound order. When working on something else, I ended up writing a prerequisite patch that refactors RelationGetPartitionDispatchInfo() to not be too tied to its current usage for tuple-routing, so that it can now be used in the planner (for example, in expand_inherited_rtentry(), instead of find_all_inheritors()). If we could adopt that patch, we can focus on the update partition row movement issues more closely on this thread, rather than the concerns about the order that planner puts partitions into. I checked that we get the same result relation order with both the patches, but I would like to highlight a notable difference here between the approaches taken by our patches. In my patch, I have now taught RelationGetPartitionDispatchInfo() to lock *only* the partitioned tables in the tree, because we need to look at its partition descriptor to collect partition OIDs and bounds. We can defer locking (and opening the relation descriptor of) leaf partitions to a point where planner has determined that the partition will be accessed after all (not pruned), which will be done in a separate patch of course. Sorry again that I didn't share this patch sooner. Thanks, Amit
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