Re: UPDATE of partition key
Etsuro Fujita <fujita.etsuro@lab.ntt.co.jp>
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. Thank you for working on this, Amit! > Hmm, I like the approach you've taken here in general, +1 for the approach. > Is there any real benefit in this "walker" interface? It looks to me > like it might be simpler to just change things around so that it > returns a list of OIDs, like find_all_inheritors, but generated > differently. Then if you want bound-ordering rather than > OID-ordering, you just do this: > > list_free(inhOids); > inhOids = get_partition_oids_in_bound_order(rel); > > That'd remove the need for some if/then logic as you've currently got > in get_next_child(). Yeah, that would make the code much simple, so +1 for Robert's idea. > 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). +1 for that as well. Another benefit from that would be EXPLAIN; we could display partitions for a partitioned table in the same order for Append and ModifyTable (ie, SELECT/UPDATE/DELETE), which I think would make the EXPLAIN result much readable. Best regards, Etsuro Fujita
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