pgsql: Improve planner's handling of set-returning functions ingroupin

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Improve planner's handling of set-returning functions ingroupin
Дата
Msg-id E1eIdcm-0003a0-9K@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Improve planner's handling of set-returning functions in grouping columns.

Improve query_is_distinct_for() to accept SRFs in the targetlist when
we can prove distinctness from a DISTINCT clause.  In that case the
de-duplication will surely happen after SRF expansion, so the proof
still works.  Continue to punt in the case where we'd try to prove
distinctness from GROUP BY (or, in the future, source relations).
To do that, we'd have to determine whether the SRFs were in the
grouping columns or elsewhere in the tlist, and it still doesn't
seem worth the trouble.  But this trivial change allows us to
recognize that "SELECT DISTINCT unnest(foo) FROM ..." produces
unique-ified output, which seems worth having.

Also, fix estimate_num_groups() to consider the possibility of SRFs in
the grouping columns.  Its failure to do so was masked before v10 because
grouping_planner() scaled up plan rowcount estimates by the estimated SRF
multiplier after performing grouping.  That doesn't happen anymore, which
is more correct, but it means we need an adjustment in the estimate for
the number of groups.  Failure to do this leads to an underestimate for
the number of output rows of subqueries like "SELECT DISTINCT unnest(foo)"
compared to what 9.6 and earlier estimated, thus breaking plan choices
in some cases.

Per report from Dmitry Shalashov.  Back-patch to v10 to avoid degraded
plan choices compared to previous releases.

Discussion: https://postgr.es/m/CAKPeCUGAeHgoh5O=SvcQxREVkoX7UdeJUMj1F5=aBNvoTa+O8w@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/df3a66e282b66971b3c08896176b95f745466a64

Modified Files
--------------
src/backend/optimizer/plan/analyzejoins.c | 28 ++++++++++++++--------------
src/backend/utils/adt/selfuncs.c          | 27 +++++++++++++++++++++++++++
2 files changed, 41 insertions(+), 14 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Robert Haas
Дата:
Сообщение: pgsql: Avoid projecting tuples unnecessarily in Gather and GatherMerge
Следующее
От: Tom Lane
Дата:
Сообщение: pgsql: Update buffile.h/.c comments for removal of non-temp option.