diff --git a/src/backend/optimizer/util/relnode.c b/src/backend/optimizer/util/relnode.c
index 8862004cbad..a6342e0a047 100644
--- a/src/backend/optimizer/util/relnode.c
+++ b/src/backend/optimizer/util/relnode.c
@@ -1422,6 +1422,22 @@ build_joinrel_tlist(PlannerInfo *root, RelOptInfo *joinrel,
 	joinrel->reltarget->width = clamp_width_est(tuple_width);
 }
 
+#ifdef USE_ASSERT_CHECKING
+static bool
+no_duplicate_clause_serials(List *clauses)
+{
+	Bitmapset  *serials = NULL;
+
+	foreach_node(RestrictInfo, rinfo, clauses)
+	{
+		if (bms_is_member(rinfo->rinfo_serial, serials))
+			return false;
+		serials = bms_add_member(serials, rinfo->rinfo_serial);
+	}
+	return true;
+}
+#endif
+
 /*
  * build_joinrel_restrictlist
  * build_joinrel_joinlist
@@ -1499,6 +1515,8 @@ build_joinrel_restrictlist(PlannerInfo *root,
 														  inner_rel,
 														  sjinfo));
 
+	Assert(no_duplicate_clause_serials(result));
+
 	return result;
 }
 
@@ -1797,6 +1815,8 @@ get_baserel_parampathinfo(PlannerInfo *root, RelOptInfo *baserel,
 #endif
 	pclauses = list_concat(pclauses, eqclauses);
 
+	Assert(no_duplicate_clause_serials(pclauses));
+
 	/* Compute set of serial numbers of the enforced clauses */
 	pserials = NULL;
 	foreach(lc, pclauses)
@@ -2012,6 +2032,8 @@ get_joinrel_parampathinfo(PlannerInfo *root, RelOptInfo *joinrel,
 	 */
 	*restrict_clauses = list_concat(pclauses, *restrict_clauses);
 
+	Assert(no_duplicate_clause_serials(*restrict_clauses));
+
 	/* If we already have a PPI for this parameterization, just return it */
 	if ((ppi = find_param_path_info(joinrel, required_outer)))
 		return ppi;
