mirror of
https://github.com/postgres/postgres.git
synced 2025-07-07 00:36:50 +03:00
Consider unsorted paths in generate_useful_gather_paths
generate_useful_gather_paths used to skip unsorted paths (without any pathkeys), but that is unnecessary - the later code actually can handle such paths just fine by adding a Sort node. This is clearly a thinko, preventing construction of useful plans. Backpatch to 13, where Incremental Sort was introduced. Author: James Coleman Reviewed-by: Tomas Vondra Backpatch-through: 13 Discussion: https://postgr.es/m/CAAaqYe8cK3g5CfLC4w7bs=hC0mSksZC=H5M8LSchj5e5OxpTAg@mail.gmail.com
This commit is contained in:
@ -2900,7 +2900,8 @@ generate_useful_gather_paths(PlannerInfo *root, RelOptInfo *rel, bool override_r
|
||||
cheapest_partial_path = linitial(rel->partial_pathlist);
|
||||
|
||||
/*
|
||||
* Consider incremental sort paths for each interesting ordering.
|
||||
* Consider sorted paths for each interesting ordering. We generate both
|
||||
* incremental and full sort.
|
||||
*/
|
||||
foreach(lc, useful_pathkeys_list)
|
||||
{
|
||||
@ -2914,14 +2915,6 @@ generate_useful_gather_paths(PlannerInfo *root, RelOptInfo *rel, bool override_r
|
||||
Path *subpath = (Path *) lfirst(lc2);
|
||||
GatherMergePath *path;
|
||||
|
||||
/*
|
||||
* If the path has no ordering at all, then we can't use either
|
||||
* incremental sort or rely on implicit sorting with a gather
|
||||
* merge.
|
||||
*/
|
||||
if (subpath->pathkeys == NIL)
|
||||
continue;
|
||||
|
||||
is_sorted = pathkeys_count_contained_in(useful_pathkeys,
|
||||
subpath->pathkeys,
|
||||
&presorted_keys);
|
||||
|
Reference in New Issue
Block a user