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 по дате отправления: