diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c
index 9753a26..041aedf 100644
--- a/src/backend/optimizer/path/allpaths.c
+++ b/src/backend/optimizer/path/allpaths.c
@@ -2364,13 +2364,12 @@ recurse_pushdown_safe(Node *setOp, Query *topquery,
 		SetOperationStmt *op = (SetOperationStmt *) setOp;
 
 		/* EXCEPT is no good (point 2 for subquery_is_pushdown_safe) */
-		if (op->op == SETOP_EXCEPT)
-			return false;
 		/* Else recurse */
 		if (!recurse_pushdown_safe(op->larg, topquery, safetyInfo))
 			return false;
-		if (!recurse_pushdown_safe(op->rarg, topquery, safetyInfo))
-			return false;
+		if (op->op != SETOP_EXCEPT)
+			if (!recurse_pushdown_safe(op->rarg, topquery, safetyInfo))
+				return false;
 	}
 	else
 	{
@@ -2736,7 +2735,8 @@ recurse_push_qual(Node *setOp, Query *topquery,
 		SetOperationStmt *op = (SetOperationStmt *) setOp;
 
 		recurse_push_qual(op->larg, topquery, rte, rti, qual);
-		recurse_push_qual(op->rarg, topquery, rte, rti, qual);
+		if (op->op != SETOP_EXCEPT)
+			recurse_push_qual(op->rarg, topquery, rte, rti, qual);
 	}
 	else
 	{
