On Thu, Apr 19, 2018 at 3:49 PM, Tom Lane <[email protected]> wrote: > Fix incorrect handling of join clauses pushed into parameterized paths. > > In some cases a clause attached to an outer join can be pushed down into > the outer join's RHS even though the clause is not degenerate --- this > can happen if we choose to make a parameterized path for the RHS. If > the clause ends up attached to a lower outer join, we'd misclassify it > as being a "join filter" not a plain "filter" condition at that node, > leading to wrong query results. > > To fix, teach extract_actual_join_clauses to examine each join clause's > required_relids, not just its is_pushed_down flag. (The latter now > seems vestigial, or at least in need of rethinking, but we won't do > anything so invasive as redefining it in a bug-fix patch.) > > This has been wrong since we introduced parameterized paths in 9.2, > though it's evidently hard to hit given the lack of previous reports. > The test case used here involves a lateral function call, and I think > that a lateral reference may be required to get the planner to select > a broken plan; though I wouldn't swear to that. In any case, even if > LATERAL is needed to trigger the bug, it still affects all supported > branches, so back-patch to all. > > Per report from Andreas Karlsson. Thanks to Andrew Gierth for > preliminary investigation. > > Discussion: https://postgr.es/m/[email protected] > > Branch > ------ > REL9_6_STABLE >
Seems to have broken the buildfarm on 9.6. cheers andrew -- Andrew Dunstan https://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
