From: Tom Lane Date: Thu, 16 Oct 2003 21:37:54 +0000 (+0000) Subject: Avoid division by zero in estimate_num_groups() when table has no rows. X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=54bd29c29cf0e88a41267c77f1153df2acf81f00;p=users%2Fbernd%2Fpostgres.git Avoid division by zero in estimate_num_groups() when table has no rows. --- diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index d4297d4d74..6a06866156 100644 --- a/src/backend/utils/adt/selfuncs.c +++ b/src/backend/utils/adt/selfuncs.c @@ -2166,17 +2166,23 @@ estimate_num_groups(Query *root, List *groupExprs, double input_rows) } /* - * Clamp to size of rel, multiply by restriction selectivity. + * Sanity check --- don't divide by zero if empty relation. */ Assert(rel->reloptkind == RELOPT_BASEREL); - if (reldistinct > rel->tuples) - reldistinct = rel->tuples; - reldistinct *= rel->rows / rel->tuples; + if (rel->tuples > 0) + { + /* + * Clamp to size of rel, multiply by restriction selectivity. + */ + if (reldistinct > rel->tuples) + reldistinct = rel->tuples; + reldistinct *= rel->rows / rel->tuples; - /* - * Update estimate of total distinct groups. - */ - numdistinct *= reldistinct; + /* + * Update estimate of total distinct groups. + */ + numdistinct *= reldistinct; + } varinfos = newvarinfos; } while (varinfos != NIL);