On 3/31/21 7:08 PM, Alvaro Herrera wrote:
> On 2021-Mar-31, Tomas Vondra wrote:
>
>> Thanks for the report, I'll take a look. You're right this seems like an
>> out-of-bounds access, but mcv_match_expression is only expected to be
>> run on expressions we know are in the statistics (because we pick the
>> statistics like that). Clearly, that does not happen here, not sure why.
>>
>> It's quite weird that we end up running textlike(), when the statistics
>> is on (double precision, boolean) columns ...
>
> Uninitialized values somewhere? Maybe valgrind would help.
>
Unlikely, I've ran it through valgrind repeatedly, including right
before commit (both on x86_64 and arm).
FWIW I'm unable to reproduce it, so not sure what's going on. David,
what configure option are you using? Anything special?
It's a bit strange, because statext_mcv_clauselist_selectivity should
only estimate "matching" clauses on the statistics. So how come this
estimates such a complex expression using textlike(), when neither of
those columns is text?
It'd be interesting to know what's happening in the code after
stat = choose_best_statistics(...);
i.e. what clauses it considers "compatible" with the statistics and why.
In fact, I wouldn't have expected the statistics to be used at all.
regards
--
Tomas Vondra
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company