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

Appearance settings

Commit 69cc60d

Browse filesBrowse files
committed
Guard against input_rows == 0 in estimate_num_groups().
This case doesn't normally happen, because the planner usually clamps all row estimates to at least one row; but I found that it can arise when dealing with relations excluded by constraints. Without a defense, estimate_num_groups() can return zero, which leads to divisions by zero inside the planner as well as assertion failures in the executor. An alternative fix would be to change set_dummy_rel_pathlist() to make the size estimate for a dummy relation 1 row instead of 0, but that seemed pretty ugly; and probably someday we'll want to drop the convention that the minimum rowcount estimate is 1 row. Back-patch to 8.4, as the problem can be demonstrated that far back.
1 parent 477b5a0 commit 69cc60d
Copy full SHA for 69cc60d

File tree

Expand file treeCollapse file tree

1 file changed

+8
-0
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+8
-0
lines changed

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

Copy file name to clipboardExpand all lines: src/backend/utils/adt/selfuncs.c
+8Lines 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
double numdistinct;
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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.