I created a GIN index on the following relation and ran an EXPLAIN query on a query, and noticed that despite all heap blocks being exact, that the outermost bitmap heap scan removed 62 rows after recheck. My understanding (mainly from https://paquier.xyz/postgresql-2/postgres-9-4-feature-highlight-lossyexact-pages-for-bitmap-heap-scan) is that if there are only exact pages, then there are only tuples in the bitmap, so I wouldn't expect to see rows being removed by the recheck. I maxed out the work memory just in case the bitmap was hitting a memory threshold where it would have to switch to lossy mode. Why would rows be removed with only exact pages?
For reference, I'm running PostgreSQL 11.9.
===
SHOW work_mem;
work_mem
--------------
2147483647kB
CREATE INDEX trgm_idx ON outcomes_development_shard_2.outcomes USING gin ((description || ' ' || title || ' ' || label) gin_trgm_ops);
EXPLAIN ANALYSE SELECT COUNT(*) FROM outcomes_development_shard_2.outcomes WHERE (description || ' ' || title || ' ' || label) %> 'multiplicatio';