Re: Ignored join clause

Andrew Gierth <andrew@tao11.riddles.org.uk>

From: Andrew Gierth <andrew@tao11.riddles.org.uk>
To: Andreas Karlsson <andreas@proxel.se>
Cc: pgsql-bugs@lists.postgresql.org
Date: 2018-04-19T02:50:52Z
Lists: pgsql-bugs
>>>>> "Andreas" == Andreas Karlsson <andreas@proxel.se> writes:

 Andreas> Hi,
 
 Andreas> It seems to me like PostgreSQL incorrectly removes a join
 Andreas> clause when planning some queries. I discovered this while
 Andreas> debugging a large query, which I below have simplified as much
 Andreas> as I could. I suspect the bug may be related to the lateral
 Andreas> join but I am not sure.

Fascinating.

What's happening here is not that the condition is being ignored, but
rather that what should be a simple filter condition (or a join filter
at the upper level) is being placed in the "Join Filter" slot of an
outer join at the inner level - where the condition's falsity doesn't
remove the whole row but causes it to be treated as unmatched.

My suspicion is that this is an interaction between lateral and join
reordering. Looking into it further.

-- 
Andrew (irc:RhodiumToad)


Commits

  1. Tweak a couple of planner APIs to save recalculating join relids.

  2. Change more places to be less trusting of RestrictInfo.is_pushed_down.

  3. Fix broken extract_actual_join_clauses call in 9.6 postgres_fdw.

  4. Fix incorrect handling of join clauses pushed into parameterized paths.

  5. Handle restriction clause lists more uniformly in postgres_fdw.