diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index 9612a276f35f780bed1bd0b39b8231db5410dd5d..4fdb67d1b3751cc20af464ba8cad33c9de0bc45f 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -2727,7 +2727,21 @@ compute_scalar_stats(VacAttrStatsP stats, slot_idx++; } } - else if (nonnull_cnt == 0 && null_cnt > 0) + else if (nonnull_cnt > 0) + { + /* We found some non-null values, but they were all too wide */ + Assert(nonnull_cnt == toowide_cnt); + stats->stats_valid = true; + /* Do the simple null-frac and width stats */ + stats->stanullfrac = (double) null_cnt / (double) samplerows; + if (is_varwidth) + stats->stawidth = total_width / (double) nonnull_cnt; + else + stats->stawidth = stats->attrtype->typlen; + /* Assume all too-wide values are distinct, so it's a unique column */ + stats->stadistinct = -1.0; + } + else if (null_cnt > 0) { /* We found only nulls; assume the column is entirely null */ stats->stats_valid = true;