diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c
index 8359beb..28164c1 100644
--- a/src/backend/executor/execMain.c
+++ b/src/backend/executor/execMain.c
@@ -1684,6 +1684,7 @@ ExecutePlan(EState *estate,
 {
 	TupleTableSlot *slot;
 	uint64		current_tuple_count;
+	bool	exit_parallel_mode = false;
 
 	/*
 	 * initialize local variables
@@ -1700,8 +1701,20 @@ ExecutePlan(EState *estate,
 	 * it to run without parallelism, because we might exit early.
 	 */
 	if (!execute_once)
+	{
 		use_parallel_mode = false;
 
+		/*
+		 * If we are already in parallel mode, then temporarily exit from that
+		 * mode and renter in it once the execution is complete.
+		 */
+		if (IsInParallelMode())
+		{
+			ExitParallelMode();
+			exit_parallel_mode = true;
+		}
+	}
+
 	if (use_parallel_mode)
 		EnterParallelMode();
 
@@ -1777,6 +1790,12 @@ ExecutePlan(EState *estate,
 		}
 	}
 
+	if (exit_parallel_mode)
+	{
+		Assert(!use_parallel_mode);
+		EnterParallelMode();
+	}
+
 	if (use_parallel_mode)
 		ExitParallelMode();
 }
