... BTW, something I'd considered in an earlier attempt at fixing this was to change clause_is_computable_at's API to pass the clause's RestrictInfo not just the clause_relids, along the lines of
@@ -541,9 +547,10 @@ extract_actual_join_clauses(List *restrictinfo_list, */ bool clause_is_computable_at(PlannerInfo *root, - Relids clause_relids, + RestrictInfo *rinfo, Relids eval_relids) { + Relids clause_relids = rinfo->clause_relids; ListCell *lc; /* Nothing to do if no outer joins have been performed yet. */ with corresponding simplifications at the call sites. That was with a view to examining has_clone/is_clone inside this function. My current proposal doesn't require that, but I'm somewhat tempted to make this API change anyway for future-proofing purposes. Thoughts? regards, tom lane