git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 9358297)
Update nbits_set in brin_bloom_union
2024年4月14日 15:58:59 +0000 (17:58 +0200)
2024年4月14日 16:07:15 +0000 (18:07 +0200)
Properly update the number of bits set in the bitmap after merging the
filters in brin_bloom_union.

This is mostly harmless, as the counter is used only in the output
function, which means pageinspect may show incorrect information about
the BRIN summary. The counter does not affect correctness.

Discovered while adding a regression test comparing indexes built with
and without parallelism. The parallel index builds exercise the union
procedure when merging results from workers, which is otherwise very
hard to do in a test. Which is why this went unnoticed until now.

Backpatch through 14, where the BRIN bloom opclasses were introduced.

Backpatch-through: 14
Discussion: https://postgr.es/m/1df00a66-db5a-4e66-809a-99b386a06d86%40enterprisedb.com


diff --git a/src/backend/access/brin/brin_bloom.c b/src/backend/access/brin/brin_bloom.c
index ebf3301627995d3481bc66f496d93c25f86ecef6..71749e6143032e34b39aa90fc2b49d5c045102b0 100644 (file)
--- a/src/backend/access/brin/brin_bloom.c
+++ b/src/backend/access/brin/brin_bloom.c
@@ -691,6 +691,9 @@ brin_bloom_union(PG_FUNCTION_ARGS)
for (i = 0; i < nbytes; i++)
filter_a->data[i] |= filter_b->data[i];
+ /* update the number of bits set in the filter */
+ filter_a->nbits_set = pg_popcount((const char *) filter_a->data, nbytes);
+
PG_RETURN_VOID();
}
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /