diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index bc81535905..647baa3cf6 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -6939,6 +6939,9 @@ apply_scanjoin_target_to_paths(PlannerInfo *root, */ rel->reltarget = llast_node(PathTarget, scanjoin_targets); + /* Extract SRF-free scan/join target. */ + scanjoin_target = linitial_node(PathTarget, scanjoin_targets); + /* Special case: handle dummy relations separately. */ if (is_dummy_rel) { @@ -6967,12 +6970,15 @@ apply_scanjoin_target_to_paths(PlannerInfo *root, rel->part_rels = NULL; rel->boundinfo = NULL; + /* Now fix things up if scan/join target contains SRFs */ + if (root->parse->hasTargetSRFs) + adjust_paths_for_srfs(root, rel, + scanjoin_targets, + scanjoin_targets_contain_srfs); + return; } - /* Extract SRF-free scan/join target. */ - scanjoin_target = linitial_node(PathTarget, scanjoin_targets); - /* * Adjust each input path. If the tlist exprs are the same, we can just * inject the sortgroupref information into the existing pathtarget.