quickfix.diff

application/octet-stream

Filename: quickfix.diff
Type: application/octet-stream
Part: 1
Message: Re: BUG #18077: PostgreSQL server subprocess crashed by a SELECT statement with WITH clause

Patch

Format: unified
File+
src/backend/optimizer/plan/setrefs.c 1 1
src/backend/utils/adt/ruleutils.c 2 0
diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c
index 97fa561e4e..9deeb7d337 100644
--- a/src/backend/optimizer/plan/setrefs.c
+++ b/src/backend/optimizer/plan/setrefs.c
@@ -547,7 +547,7 @@ add_rte_to_flat_rtable(PlannerGlobal *glob, List *rteperminfos,
 
 	/* zap unneeded sub-structure */
 	newrte->tablesample = NULL;
-	newrte->subquery = NULL;
+//	newrte->subquery = NULL;
 	newrte->joinaliasvars = NIL;
 	newrte->joinleftcols = NIL;
 	newrte->joinrightcols = NIL;
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index 97b0ef22ac..82d33fe595 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -5004,6 +5004,8 @@ set_deparse_plan(deparse_namespace *dpns, Plan *plan)
 	else if (IsA(plan, WorkTableScan))
 		dpns->inner_plan = find_recursive_union(dpns,
 												(WorkTableScan *) plan);
+	else if (IsA(plan, CustomScan) && dpns->subplans != NULL)
+		dpns->inner_plan = (Plan *) linitial(dpns->subplans);
 	else if (IsA(plan, ModifyTable))
 		dpns->inner_plan = plan;
 	else