diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index eecd64e4b5..c86a3b40e0 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -9946,6 +9946,7 @@ get_from_clause_item(Node *jtnode, Query *query, deparse_context *context)
 		deparse_columns *colinfo = deparse_columns_fetch(varno, dpns);
 		RangeTblFunction *rtfunc1 = NULL;
 		bool		printalias;
+		TupleDesc resultDesc;
 
 		if (rte->lateral)
 			appendStringInfoString(buf, "LATERAL ");
@@ -9962,8 +9963,15 @@ get_from_clause_item(Node *jtnode, Query *query, deparse_context *context)
 				break;
 			case RTE_SUBQUERY:
 				/* Subquery RTE */
+
+				/* Create a dummy tuple descriptor for the subquery. */
+				resultDesc = CreateTemplateTupleDesc(colinfo->num_cols, false);
+				int colno;
+				for (colno = 0; colno < colinfo->num_cols; colno++)
+					namestrcpy(&(resultDesc->attrs[colno].attname), colinfo->colnames[colno]);
+
 				appendStringInfoChar(buf, '(');
-				get_query_def(rte->subquery, buf, context->namespaces, NULL,
+				get_query_def(rte->subquery, buf, context->namespaces, resultDesc,
 							  context->prettyFlags, context->wrapColumn,
 							  context->indentLevel);
 				appendStringInfoChar(buf, ')');
