1
0
mirror of https://github.com/postgres/postgres.git synced 2025-11-04 20:11:56 +03:00

Fix Asserts in calc_non_nestloop_required_outer().

These were not testing the same thing as the comparable Assert
in calc_nestloop_required_outer(), because we neglected to map
the given Paths' relids to top-level relids.  When considering
a partition child join the latter is the correct thing to do.

This oversight is old, but since it's only an overly-weak Assert
check there doesn't seem to be much value in back-patching.

Richard Guo (with cosmetic changes and comment updates by me)

Discussion: https://postgr.es/m/CAMbWs49sqbe9GBZ8sy8dSfKRNURgicR85HX8vgzcgQsPF0XY1w@mail.gmail.com
This commit is contained in:
Tom Lane
2024-01-10 13:51:36 -05:00
parent d641b827af
commit add673b897
2 changed files with 29 additions and 4 deletions

View File

@@ -730,8 +730,11 @@ try_nestloop_path(PlannerInfo *root,
return;
/*
* Paths are parameterized by top-level parents, so run parameterization
* tests on the parent relids.
* Any parameterization of the input paths refers to topmost parents of
* the relevant relations, because reparameterize_path_by_child() hasn't
* been called yet. So we must consider topmost parents of the relations
* being joined, too, while determining parameterization of the result and
* checking for disallowed parameterization cases.
*/
if (innerrel->top_parent_relids)
innerrelids = innerrel->top_parent_relids;