pgsql: Ensure generated join clauses for child rels have correct relids

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Ensure generated join clauses for child rels have correct relids
Дата
Msg-id E1rwkeM-002M7A-Jy@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Ensure generated join clauses for child rels have correct relids.

When building a join clause derived from an EquivalenceClass, if the
clause is to be used with an appendrel child relation then make sure
its clause_relids include the relids of that child relation.
Normally this would be true already because the EquivalenceMember
would be a Var of that relation.  However, if the appendrel represents
a flattened UNION ALL construct then some child EquivalenceMembers
could be constants with no relids.  The resulting under-marked clause
is problematic because it could mislead join_clause_is_movable_into
about where the clause should be evaluated.  We do not have an example
showing incorrect plan generation, but there are existing cases in
the regression tests that will fail the Asserts this patch adds to
get_baserel_parampathinfo.  A similarly wrong conclusion about a
clause being considered by get_joinrel_parampathinfo would lead to
wrong placement of the clause.  (This also squares with the way
that clause_relids is calculated for non-equijoin clauses in
adjust_appendrel_attrs.)

The other reason for wanting these new Asserts is that the previous
blithe assumption that the results of generate_join_implied_equalities
"necessarily satisfy join_clause_is_movable_into" turns out to be
wrong pre-v16.  If it's still wrong it'd be good to find out.

Per bug #18429 from Benoît Ryder.  The bug as filed was fixed by
commit 2489d76c4, but these changes correlate with the fix we
will need to apply in pre-v16 branches.

Discussion: https://postgr.es/m/18429-8982d4a348cc86c6@postgresql.org

Branch
------
REL_16_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/91800af1371029f75e8e34d55e9b412706eec182

Modified Files
--------------
src/backend/optimizer/path/equivclass.c | 15 +++++++++++++++
src/backend/optimizer/util/relnode.c    | 26 +++++++++++++++++++-------
2 files changed, 34 insertions(+), 7 deletions(-)


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

Предыдущее
От: Peter Geoghegan
Дата:
Сообщение: pgsql: Fix nbtree posting list comment.
Следующее
От: Tomas Vondra
Дата:
Сообщение: pgsql: Stabilize test of BRIN parallel create