Re: BUG #16863: Assert failed in set_plain_rel_size() on processing ~* with a long prefix

Tom Lane <tgl@sss.pgh.pa.us>

From: Tom Lane <tgl@sss.pgh.pa.us>
To: Alexander Lakhin <exclusion@gmail.com>
Cc: pgsql-bugs@lists.postgresql.org
Date: 2021-02-12T20:37:41Z
Lists: pgsql-bugs
Alexander Lakhin <exclusion@gmail.com> writes:
> I've found a division that produces NaN:
> sel /= pow(FIXED_CHAR_SEL, fixed_prefix_len);

Hmm.  I'm not getting a NaN AFAICT, but I am getting pretty darn weird
estimates.  I agree this needs some kind of clamp.

regression=# create table test (t text);
CREATE TABLE
regression=# explain SELECT * FROM test WHERE t ~* ('^' || repeat('-', 500));
...
 Seq Scan on test  (cost=0.00..27.00 rows=10000000000000000159028911097599180468360808563945281389781327557747838772170381060813469985856815104 width=32)
...

BTW, the message you're answering hasn't shown up here, nor is it
in the mailing list archives.  Odd.

			regards, tom lane



Commits

  1. Avoid divide-by-zero in regex_selectivity() with long fixed prefix.

  2. Prevent overly large and NaN row estimates in relations