diff --git a/src/backend/optimizer/plan/analyzejoins.c b/src/backend/optimizer/plan/analyzejoins.c index 12e9ed0d0c7..4b9b5d563f6 100644 --- a/src/backend/optimizer/plan/analyzejoins.c +++ b/src/backend/optimizer/plan/analyzejoins.c @@ -1635,9 +1635,14 @@ restrict_infos_logically_equal(RestrictInfo *a, RestrictInfo *b) int saved_rinfo_serial = a->rinfo_serial; bool result; - a->rinfo_serial = b->rinfo_serial; - result = equal(a, b); - a->rinfo_serial = saved_rinfo_serial; + if (bms_membership(a->required_relids) == BMS_SINGLETON) + result = equal(a->clause, b->clause); + else + { + a->rinfo_serial = b->rinfo_serial; + result = equal(a, b); + a->rinfo_serial = saved_rinfo_serial; + } return result; } diff --git a/src/backend/rewrite/rewriteManip.c b/src/backend/rewrite/rewriteManip.c index fe89754a73c..2ad663c952a 100644 --- a/src/backend/rewrite/rewriteManip.c +++ b/src/backend/rewrite/rewriteManip.c @@ -744,6 +744,12 @@ ChangeVarNodes(Node *node, int rt_index, int new_index, int sublevels_up) bool ChangeVarNodesWalkExpression(Node *node, ChangeVarNodes_context *context) { + if (node == NULL) + return false; + + if (ChangeVarNodes_walker(node, context)) + return true; + return expression_tree_walker(node, ChangeVarNodes_walker, (void *) context);