diff --git a/src/backend/utils/adt/jsonfuncs.c b/src/backend/utils/adt/jsonfuncs.c
index bf1646771423fe8faaa12898e53fdd3fbbd92fef..73923951e8073a0715f98a9951f93ac18caa7584 100644
--- a/src/backend/utils/adt/jsonfuncs.c
+++ b/src/backend/utils/adt/jsonfuncs.c
@@ -2160,6 +2160,8 @@ populate_record_worker(FunctionCallInfo fcinfo, bool have_record_arg)
 		my_extra = (RecordIOData *) fcinfo->flinfo->fn_extra;
 		my_extra->record_type = InvalidOid;
 		my_extra->record_typmod = 0;
+		my_extra->ncolumns = ncolumns;
+		MemSet(my_extra->columns, 0, sizeof(ColumnIOData) * ncolumns);
 	}
 
 	if (have_record_arg && (my_extra->record_type != tupType ||