From 2f20ced1eb53de396d8a420fa5cffca2a2376de4 Mon Sep 17 00:00:00 2001 From: Tomas Vondra Date: Sun, 14 Apr 2024 17:58:59 +0200 Subject: [PATCH] Update nbits_set in brin_bloom_union 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 --- src/backend/access/brin/brin_bloom.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/backend/access/brin/brin_bloom.c b/src/backend/access/brin/brin_bloom.c index ebf33016279..71749e61430 100644 --- 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(); }