aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/optimizer/path/costsize.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c
index c7400941eec..ca3ad7bc43c 100644
--- a/src/backend/optimizer/path/costsize.c
+++ b/src/backend/optimizer/path/costsize.c
@@ -2707,8 +2707,9 @@ initial_cost_mergejoin(PlannerInfo *root, JoinCostWorkspace *workspace,
outer_rows = clamp_row_est(outer_path_rows * outerendsel);
inner_rows = clamp_row_est(inner_path_rows * innerendsel);
- Assert(outer_skip_rows <= outer_rows);
- Assert(inner_skip_rows <= inner_rows);
+ /* skip rows can become NaN when path rows has become infinite */
+ Assert(outer_skip_rows <= outer_rows || isnan(outer_skip_rows));
+ Assert(inner_skip_rows <= inner_rows || isnan(inner_skip_rows));
/*
* Readjust scan selectivities to account for above rounding. This is
@@ -2720,8 +2721,9 @@ initial_cost_mergejoin(PlannerInfo *root, JoinCostWorkspace *workspace,
outerendsel = outer_rows / outer_path_rows;
innerendsel = inner_rows / inner_path_rows;
- Assert(outerstartsel <= outerendsel);
- Assert(innerstartsel <= innerendsel);
+ /* start sel can become NaN when path rows has become infinite */
+ Assert(outerstartsel <= outerendsel || isnan(outerstartsel));
+ Assert(innerstartsel <= innerendsel || isnan(innerstartsel));
/* cost of source data */