I wrote:
> Hm, I see the assert failure, but this example doesn't seem to crash
> when asserts are off, and I'd not expect it to: it should either work or
> elog(ERROR) in ExecRestrPos. So maybe you've found more than one issue.
The attached patch fixes the failure you exhibited, but I still don't
see how this problem would lead to a non-assert crash --- what you
should get is elog(ERROR, "unrecognized node type") from ExecRestrPos.
So please try some more test cases and see if there's another problem
lurking.
BTW, the problem was due to code added in response to an earlier gripe of
yours (allowing gating conditions to be pushed further down in the join
tree). Maybe you're the only person stressing that particular aspect
of the planner ...
regards, tom lane