 src/backend/nodes/outfuncs.c  |  4 ++--
 src/backend/nodes/readfuncs.c | 16 ++++++++++++++++
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c
index 4645ecb..61dbc75 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 72368ab..c6af1d5 100644
--- a/src/backend/nodes/readfuncs.c
+++ b/src/backend/nodes/readfuncs.c
@@ -1999,6 +1999,20 @@ _readUnique(void)
 }
 
 /*
+ * _readGather
+ */
+static Gather *
+_readGather(void)
+{
+	READ_LOCALS(Gather);
+
+	ReadCommonPlan(&local_node->plan);
+
+	READ_INT_FIELD(num_workers);
+	READ_BOOL_FIELD(single_copy);
+}
+
+/*
  * _readHash
  */
 static Hash *
@@ -2365,6 +2379,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))
