From 6c1ecb88fcd482b1fe0c805bd888f140967164d4 Mon Sep 17 00:00:00 2001
From: Richard Guo <guofenglinux@gmail.com>
Date: Thu, 3 Aug 2023 10:18:53 +0800
Subject: [PATCH v1] Fix bogus Asserts in calc_non_nestloop_required_outer

---
 src/backend/optimizer/util/pathnode.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c
index f123fcb41e..062928288d 100644
--- a/src/backend/optimizer/util/pathnode.c
+++ b/src/backend/optimizer/util/pathnode.c
@@ -2391,8 +2391,14 @@ calc_non_nestloop_required_outer(Path *outer_path, Path *inner_path)
 	Relids		required_outer;
 
 	/* neither path can require rels from the other */
-	Assert(!bms_overlap(outer_paramrels, inner_path->parent->relids));
-	Assert(!bms_overlap(inner_paramrels, outer_path->parent->relids));
+	Assert(!bms_overlap(outer_paramrels,
+						inner_path->parent->top_parent_relids ?
+						inner_path->parent->top_parent_relids :
+						inner_path->parent->relids));
+	Assert(!bms_overlap(inner_paramrels,
+						outer_path->parent->top_parent_relids ?
+						outer_path->parent->top_parent_relids :
+						outer_path->parent->relids));
 	/* form the union ... */
 	required_outer = bms_union(outer_paramrels, inner_paramrels);
 	/* we do not need an explicit test for empty; bms_union gets it right */
-- 
2.31.0

