diff options
author | Michael Paquier <michael@paquier.xyz> | 2023-11-08 14:06:36 +0900 |
---|---|---|
committer | Michael Paquier <michael@paquier.xyz> | 2023-11-08 14:06:36 +0900 |
commit | 4dccf9575369410f0c853e6f1b0b0579c8ec1c05 (patch) | |
tree | 7a0774f632231aa186692b27ada70e2d2f915a68 | |
parent | 3edc6580c0e27fb8f13322efd255a88d20dda6c2 (diff) | |
download | postgresql-4dccf9575369410f0c853e6f1b0b0579c8ec1c05.tar.gz postgresql-4dccf9575369410f0c853e6f1b0b0579c8ec1c05.zip |
Enlarge assertion in bloom_init() for false_positive_rate
false_positive_rate is a parameter that can be set with the bloom
opclass in BRIN, and setting it to a value of exactly 0.25 would trigger
an assertion in the first INSERT done on the index with value set.
The assertion changed here relied on BLOOM_{MIN|MAX}_FALSE_POSITIVE_RATE
that are somewhat arbitrary values, and specifying an out-of-range value
would also trigger a failure when defining such an index. So, as-is,
the assertion was just doubling on the min-max check of the reloption.
This is now enlarged to check that it is a correct percentage value,
instead, based on a suggestion by Tom Lane.
Author: Alexander Lakhin
Reviewed-by: Tom Lane, Shihao Zhong
Discussion: https://postgr.es/m/17969-a6c54de48026d694@postgresql.org
Backpatch-through: 14
-rw-r--r-- | src/backend/access/brin/brin_bloom.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/src/backend/access/brin/brin_bloom.c b/src/backend/access/brin/brin_bloom.c index e4953a9d37b..1ed0d8a3b80 100644 --- a/src/backend/access/brin/brin_bloom.c +++ b/src/backend/access/brin/brin_bloom.c @@ -279,8 +279,7 @@ bloom_init(int ndistinct, double false_positive_rate) double k; /* number of hash functions */ Assert(ndistinct > 0); - Assert((false_positive_rate >= BLOOM_MIN_FALSE_POSITIVE_RATE) && - (false_positive_rate < BLOOM_MAX_FALSE_POSITIVE_RATE)); + Assert(false_positive_rate > 0 && false_positive_rate < 1); /* sizing bloom filter: -(n * ln(p)) / (ln(2))^2 */ nbits = ceil(-(ndistinct * log(false_positive_rate)) / pow(log(2.0), 2)); |