pgsql: Avoid believing incomplete MCV-only stats in get_variable_range(

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Avoid believing incomplete MCV-only stats in get_variable_range(
Date: 2021-10-01 19:00:07
Message-ID: E1mWNlP-0007wu-46@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Avoid believing incomplete MCV-only stats in get_variable_range().

get_variable_range() would incautiously believe that statistics
containing only an MCV list are sufficient to derive a range estimate.
That's okay for an enum-like column that contains only MCVs, but
otherwise the estimate could be pretty bad. Make it report that the
range is indeterminate unless the MCVs plus nullfrac account for
the whole table.

I don't think this needs a dedicated test case, since a quick code
coverage check verifies that the existing regression tests traverse
all the alternatives. There is room to doubt that a future-proof
test case could be built anyway, given that the submitted example
accidentally doesn't fail before v11.

Per bug #17207 from Simon Perepelitsa. Back-patch to v10.
In principle this has been broken all along, but I'm hesitant to
make such changes in 9.6, since if anyone is unhappy with 9.6.24's
behavior there will be no second chance to fix it.

Discussion: https://postgr.es/m/17207-5265aefa79e333b4@postgresql.org

Branch
------
REL_10_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/f951ea3a2a830f93b623862ad22ec889883b3adc

Modified Files
--------------
src/backend/utils/adt/selfuncs.c | 86 ++++++++++++++++++++++++++--------------
1 file changed, 56 insertions(+), 30 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Daniel Gustafsson 2021-10-01 20:50:24 pgsql: Fix memory leak in pg_hmac
Previous Message Tom Lane 2021-10-01 15:10:38 pgsql: Fix Portal snapshot tracking to handle subtransactions properly.