aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access/transam/xlog.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2014-01-11 13:41:41 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2014-01-11 13:41:51 -0500
commit36785a21ba6003ddb846cd736170b9c194e97766 (patch)
tree38c8a6df15d36ee728fd6a20b7f6086009318ff5 /src/backend/access/transam/xlog.c
parenta25c2b7c4db3b4542e05d660e55bef5c93fdc32d (diff)
downloadpostgresql-36785a21ba6003ddb846cd736170b9c194e97766.tar.gz
postgresql-36785a21ba6003ddb846cd736170b9c194e97766.zip
Fix compute_scalar_stats() for case that all values exceed WIDTH_THRESHOLD.
The standard typanalyze functions skip over values whose detoasted size exceeds WIDTH_THRESHOLD (1024 bytes), so as to limit memory bloat during ANALYZE. However, we (I think I, actually :-() failed to consider the possibility that *every* non-null value in a column is too wide. While compute_minimal_stats() seems to behave reasonably anyway in such a case, compute_scalar_stats() just fell through and generated no pg_statistic entry at all. That's unnecessarily pessimistic: we can still produce valid stanullfrac and stawidth values in such cases, since we do include too-wide values in the average-width calculation. Furthermore, since the general assumption in this code is that too-wide values are probably all distinct from each other, it seems reasonable to set stadistinct to -1 ("all distinct"). Per complaint from Kadri Raudsepp. This has been like this since roughly neolithic times, so back-patch to all supported branches.
Diffstat (limited to 'src/backend/access/transam/xlog.c')
0 files changed, 0 insertions, 0 deletions