diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c
index 4645ecb804fa0fd4e78fd14f3436ba5b7a8e333c..61dbc75036c1678d008d07e1051b501563ab26f3 100644
--- a/src/backend/nodes/outfuncs.c
+++ b/src/backend/nodes/outfuncs.c
@@ -439,8 +439,8 @@ _outGather(StringInfo str, const Gather *node)
 
 	_outPlanInfo(str, (const Plan *) node);
 
-	WRITE_UINT_FIELD(num_workers);
-	WRITE_UINT_FIELD(single_copy);
+	WRITE_INT_FIELD(num_workers);
+	WRITE_BOOL_FIELD(single_copy);
 }
 
 static void
diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c
index 72368ab981d98bdc061ee64606e894275d2fe779..2777cbb9c08e64c5b6a285bc4dfda551a1b1ce06 100644
--- a/src/backend/nodes/readfuncs.c
+++ b/src/backend/nodes/readfuncs.c
@@ -1998,6 +1998,22 @@ _readUnique(void)
 	READ_DONE();
 }
 
+/*
+ * _readGather
+ */
+static Gather *
+_readGather(void)
+{
+	READ_LOCALS(Gather);
+
+	ReadCommonPlan(&local_node->plan);
+
+	READ_INT_FIELD(num_workers);
+	READ_BOOL_FIELD(single_copy);
+
+	READ_DONE();
+}
+
 /*
  * _readHash
  */
@@ -2365,6 +2381,8 @@ parseNodeString(void)
 		return_value = _readWindowAgg();
 	else if (MATCH("UNIQUE", 6))
 		return_value = _readUnique();
+	else if (MATCH("GATHER", 6))
+		return_value = _readGather();
 	else if (MATCH("HASH", 4))
 		return_value = _readHash();
 	else if (MATCH("SETOP", 5))