Hi,

On 2022-11-21 17:06:16 +0100, Jakub Wartak wrote:
> @@ -6213,14 +6216,26 @@ get_actual_variable_endpoint(Relation heapRel,
>       /* Fetch first/next tuple in specified direction */
>       while ((tid = index_getnext_tid(index_scan, indexscandir)) != NULL)
>       {
> +             BlockNumber block = ItemPointerGetBlockNumber(tid);
>               if (!VM_ALL_VISIBLE(heapRel,
> -                                                     
> ItemPointerGetBlockNumber(tid),
> +                                                     block,
>                                                       &vmbuffer))
>               {
>                       /* Rats, we have to visit the heap to check visibility 
> */
>                       if (!index_fetch_heap(index_scan, tableslot))
>                               continue;               /* no visible tuple, 
> try next index entry */
>  
> +                     {
> +                             CHECK_FOR_INTERRUPTS();
> +                             if (block != last_block)
> +                                     visited_pages++;
> +#define VISITED_PAGES_LIMIT 100
> +                             if (visited_pages > VISITED_PAGES_LIMIT)
> +                                     break;
> +                             else
> +                                     continue; /* no visible tuple, try next 
> index entry */
> +                     }
> +
>                       /* We don't actually need the heap tuple for anything */
>                       ExecClearTuple(tableslot);
>  
> -- 
> 2.30.2

This can't quite be right - isn't this only applying the limit if we found a
visible tuple?

Greetings,

Andres Freund


Reply via email to