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 {