Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit69cc60d

Browse files
committed
Guard against input_rows == 0 in estimate_num_groups().
This case doesn't normally happen, because the planner usually clampsall row estimates to at least one row; but I found that it can arisewhen dealing with relations excluded by constraints. Without a defense,estimate_num_groups() can return zero, which leads to divisions by zeroinside the planner as well as assertion failures in the executor.An alternative fix would be to change set_dummy_rel_pathlist() to makethe size estimate for a dummy relation 1 row instead of 0, but that seemedpretty ugly; and probably someday we'll want to drop the convention thatthe minimum rowcount estimate is 1 row.Back-patch to 8.4, as the problem can be demonstrated that far back.
1 parent477b5a0 commit69cc60d

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

‎src/backend/utils/adt/selfuncs.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3209,6 +3209,14 @@ estimate_num_groups(PlannerInfo *root, List *groupExprs, double input_rows)
32093209
doublenumdistinct;
32103210
ListCell*l;
32113211

3212+
/*
3213+
* We don't ever want to return an estimate of zero groups, as that tends
3214+
* to lead to division-by-zero and other unpleasantness. The input_rows
3215+
* estimate is usually already at least 1, but clamp it just in case it
3216+
* isn't.
3217+
*/
3218+
input_rows=clamp_row_est(input_rows);
3219+
32123220
/*
32133221
* If no grouping columns, there's exactly one group. (This can't happen
32143222
* for normal cases with GROUP BY or DISTINCT, but it is possible for

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp