Re: Incorrect result of bitmap heap scan.

Peter Geoghegan <pg@bowt.ie>

From: Peter Geoghegan <pg@bowt.ie>
To: Andres Freund <andres@anarazel.de>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, Matthias van de Meent <boekewurm+postgres@gmail.com>, Konstantin Knizhnik <knizhnik@garret.ru>, PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2024-12-02T21:16:19Z
Lists: pgsql-hackers
On Mon, Dec 2, 2024 at 3:55 PM Andres Freund <andres@anarazel.de> wrote:
> I suspect one contributor to this avoiding attention till now was that the
> optimization is fairly narrow:
>
>                         /*
>                          * We can potentially skip fetching heap pages if we do not need
>                          * any columns of the table, either for checking non-indexable
>                          * quals or for returning data.  This test is a bit simplistic, as
>                          * it checks the stronger condition that there's no qual or return
>                          * tlist at all. But in most cases it's probably not worth working
>                          * harder than that.
>                          */
>                         need_tuples = (node->ss.ps.plan->qual != NIL ||
>                                                    node->ss.ps.plan->targetlist != NIL);
>
> Even an entry in the targetlist that that does not depend on the current row
> disables the optimization.

Good point. I agree that that factor is likely to have masked the
problem over the past 6 years.

-- 
Peter Geoghegan



Commits

  1. Add test for HeapBitmapScan's broken skip_fetch optimization

  2. Remove HeapBitmapScan's skip_fetch optimization

  3. Allow bitmap scans to operate as index-only scans when possible.