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.
