pgsql: Fix incorrect step generation in HASH partition pruning

Поиск
Список
Период
Сортировка
От David Rowley
Тема pgsql: Fix incorrect step generation in HASH partition pruning
Дата
Msg-id E1qqpaA-0007cE-5M@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix incorrect step generation in HASH partition pruning

get_steps_using_prefix_recurse() incorrectly assumed that it could stop
recursive processing of the 'prefix' list when cur_keyno was one before
the step_lastkeyno.  Since hash partition pruning can prune using IS
NULL quals, and these IS NULL quals are not present in the 'prefix'
list, then that logic could cause more levels of recursion than what is
needed and lead to there being no more items in the 'prefix' list to
process.  This would manifest itself as a crash in some code that
expected the 'start' ListCell not to be NULL.

Here we adjust the logic so that instead of stopping recursion at 1 key
before the step_lastkeyno, we just look at the llast(prefix) item and
ensure we only recursively process up until just before whichever the last
key is.  This effectively allows keys to be missing in the 'prefix' list.

This change does mean that step_lastkeyno is no longer needed, so we
remove that from the static functions.  I also spent quite some time
reading this code and testing it to try to convince myself that there
are no other issues.  That resulted in the irresistible temptation of
rewriting some comments, many of which were just not true or inconcise.

Reported-by: Sergei Glukhov
Reviewed-by: Sergei Glukhov, tender wang
Discussion: https://postgr.es/m/2f09ce72-315e-2a33-589a-8519ada8df61@postgrespro.ru
Backpatch-through: 11, where partition pruning was introduced.

Branch
------
REL_11_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/07f261b3172d6371019af38f61d17f5c3c1fe9aa

Modified Files
--------------
src/backend/partitioning/partprune.c          | 106 +++++++-----
src/test/regress/expected/partition_prune.out | 236 ++++++++++++++++++++++++--
src/test/regress/sql/partition_prune.sql      |  55 +++++-
3 files changed, 335 insertions(+), 62 deletions(-)


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

Предыдущее
От: David Rowley
Дата:
Сообщение: pgsql: Fix incorrect step generation in HASH partition pruning
Следующее
От: David Rowley
Дата:
Сообщение: pgsql: Doc: fix grammatical errors for enable_partitionwise_aggregate