diff options
Diffstat (limited to 'src/backend/utils/adt/selfuncs.c')
-rw-r--r-- | src/backend/utils/adt/selfuncs.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index b90d2d7412c..6704e7f049f 100644 --- a/src/backend/utils/adt/selfuncs.c +++ b/src/backend/utils/adt/selfuncs.c @@ -4376,8 +4376,8 @@ examine_variable(PlannerInfo *root, Node *node, int varRelid, * * vardata: results of examine_variable * - * NB: be careful to produce an integral result, since callers may compare - * the result to exact integer counts. + * NB: be careful to produce a positive integral result, since callers may + * compare the result to exact integer counts, or might divide by it. */ double get_variable_numdistinct(VariableStatData *vardata) @@ -4451,7 +4451,7 @@ get_variable_numdistinct(VariableStatData *vardata) * If we had an absolute estimate, use that. */ if (stadistinct > 0.0) - return stadistinct; + return clamp_row_est(stadistinct); /* * Otherwise we need to get the relation size; punt if not available. @@ -4466,14 +4466,14 @@ get_variable_numdistinct(VariableStatData *vardata) * If we had a relative estimate, use that. */ if (stadistinct < 0.0) - return floor((-stadistinct * ntuples) + 0.5); + return clamp_row_est(-stadistinct * ntuples); /* * With no data, estimate ndistinct = ntuples if the table is small, else * use default. */ if (ntuples < DEFAULT_NUM_DISTINCT) - return ntuples; + return clamp_row_est(ntuples); return DEFAULT_NUM_DISTINCT; } |