diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index c7400941ee..ca3ad7bc43 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 */