pgsql: Fix incorrect partition pruning logic for boolean partitioned ta

Поиск
Список
Период
Сортировка
От David Rowley
Тема pgsql: Fix incorrect partition pruning logic for boolean partitioned ta
Дата
Msg-id E1pnAxG-002yFd-Jg@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix incorrect partition pruning logic for boolean partitioned tables

The partition pruning logic assumed that "b IS NOT true" was exactly the
same as "b IS FALSE".  This is not the case when considering NULL values.
Fix this so we correctly include any partition which could hold NULL
values for the NOT case.

Additionally, this fixes a bug in the partition pruning code which handles
partitioned tables partitioned like ((NOT boolcol)).  This is a seemingly
unlikely schema design, and it was untested and also broken.

Here we add tests for the ((NOT boolcol)) case and insert some actual data
into those tables and verify we do get the correct rows back when running
queries.  I've also adjusted the existing boolpart tests to include some
data and verify we get the correct results too.

Both the bugs being fixed here could lead to incorrect query results with
fewer rows being returned than expected.  No additional rows could have
been returned accidentally.

In passing, remove needless ternary expression.  It's more simple just to
pass !is_not_clause to makeBoolConst().  It makes sense to do this so the
code is consistent with the bug fix in the "else if" condition just below.

David Kimura did submit a patch to fix the first of the issues here, but
that's not what's being committed here.

Reported-by: David Kimura
Reviewed-by: Richard Guo, David Kimura
Discussion: https://postgr.es/m/CAHnPFjQ5qxs6J_p+g8=ww7GQvfn71_JE+Tygj0S7RdRci1uwPw@mail.gmail.com
Backpatch-through: 11, all supported versions

Branch
------
REL_13_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/6848f0c67c60dc721c4e4527778f83e2c8c08d01

Modified Files
--------------
src/backend/partitioning/partprune.c          |  54 +++---
src/test/regress/expected/partition_prune.out | 227 ++++++++++++++++++++++++--
src/test/regress/sql/partition_prune.sql      |  38 ++++-
3 files changed, 288 insertions(+), 31 deletions(-)


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

Предыдущее
От: David Rowley
Дата:
Сообщение: pgsql: Fix incorrect partition pruning logic for boolean partitioned ta
Следующее
От: David Rowley
Дата:
Сообщение: pgsql: Fix incorrect partition pruning logic for boolean partitioned ta