From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | pgsql-committers(at)lists(dot)postgresql(dot)org |
Subject: | pgsql: Fix planner failure in some cases of sorting by an aggregate. |
Date: | 2021-04-20 15:37:45 |
Message-ID: | E1lYsRd-0002ur-V5@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
Fix planner failure in some cases of sorting by an aggregate.
An oversight introduced by the incremental-sort patches caused
"could not find pathkey item to sort" errors in some situations
where a sort key involves an aggregate or window function.
The basic problem here is that find_em_expr_usable_for_sorting_rel
isn't properly modeling what prepare_sort_from_pathkeys will do
later. Rather than hoping we can keep those functions in sync,
let's refactor so that they actually share the code for
identifying a suitable sort expression.
With this refactoring, tlist.c's tlist_member_ignore_relabel
is unused. I removed it in HEAD but left it in place in v13,
in case any extensions are using it.
Per report from Luc Vlaming. Back-patch to v13 where the
problem arose.
James Coleman and Tom Lane
Discussion: https://postgr.es/m/91f3ec99-85a4-fa55-ea74-33f85a5c651f@swarm64.com
Branch
------
REL_13_STABLE
Details
-------
https://git.postgresql.org/pg/commitdiff/7bfba4f1933003716d432d29d4d228bcf28e2e70
Modified Files
--------------
src/backend/optimizer/path/equivclass.c | 255 ++++++++++++++++++++-----
src/backend/optimizer/plan/createplan.c | 118 +-----------
src/include/optimizer/paths.h | 8 +
src/test/regress/expected/incremental_sort.out | 26 +++
src/test/regress/sql/incremental_sort.sql | 7 +
5 files changed, 262 insertions(+), 152 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Emre Hasegeli | 2021-04-20 15:49:14 | Re: pgsql: Convert built-in SQL-language functions to SQL-standard-body sty |
Previous Message | Andrew Dunstan | 2021-04-20 14:36:34 | pgsql: Avoid unfortunate IPC::Run path caching in PostgresNode |