I wrote: > Also, if you compare that test case to the one immediately following > it, it's downright weird that we are presently smarter about > optimizing the more complicated case. (I've not dug into exactly > why that is; maybe worth running it to ground?)
The reason seems to be that joinrels.c's restriction_is_constant_false knows that it has to check all members of the restrictinfo list, not just one; and we get to that because some of the originally generated EC clauses are join clauses in the second case. So this logic in relation_excluded_by_constraints is just wrong --- premature optimization on my part, looks like. regards, tom lane