diff --git a/src/backend/optimizer/plan/analyzejoins.c b/src/backend/optimizer/plan/analyzejoins.c index 11ce7e33573..cd8a1ee26a9 100644 --- a/src/backend/optimizer/plan/analyzejoins.c +++ b/src/backend/optimizer/plan/analyzejoins.c @@ -344,7 +344,8 @@ remove_rel_from_query(PlannerInfo *root, RelOptInfo *rel, } /* - * Remove references to the rel from other baserels' attr_needed arrays. + * Remove references to the rel from other baserels' attr_needed arrays and + * lateral_vars lists. */ for (rti = 1; rti < root->simple_rel_array_size; rti++) { @@ -366,12 +367,16 @@ remove_rel_from_query(PlannerInfo *root, RelOptInfo *rel, attroff--) { otherrel->attr_needed[attroff] = - bms_del_member(otherrel->attr_needed[attroff], relid); + adjust_relid_set(otherrel->attr_needed[attroff], relid, subst); if (sjinfo != NULL) otherrel->attr_needed[attroff] = bms_del_member(otherrel->attr_needed[attroff], sjinfo->ojrelid); } + + if (subst > 0) + ChangeVarNodesExtended((Node *) otherrel->lateral_vars, relid, + subst, 0, replace_relid_callback); } /*