Make SP-GiST redirect cleanup more aggressive.
authorPeter Geoghegan <[email protected]>
Mon, 3 Apr 2023 18:47:48 +0000 (11:47 -0700)
committerPeter Geoghegan <[email protected]>
Mon, 3 Apr 2023 18:47:48 +0000 (11:47 -0700)
Commit 61b313e4 made VACUUM pass down a heaprel to index AM bulkdelete
and vacuumcleanup routines.  Although this was primarily intended as
preparation for logical decoding on standbys, it also made it easy to
correct an old deficiency in how we determine how to cleanup SP-GiST
redirect and placeholder tuples.

Pass the heaprel to GlobalVisTestFor() during cleanup of redirect and
placeholder tuples, rather than pessimistically passing NULL.

Author: Bertrand Drouvot <[email protected]>
Discussion: https://postgr.es/m/02392033-f030-a3c8-c7d0-5c27eb529fec@gmail.com

src/backend/access/spgist/spgvacuum.c

index 2f4a4aad24195872cf8879b952fad45948f61795..8a5b540c809af1df984f5ef14bc3c8788a129721 100644 (file)
@@ -507,8 +507,7 @@ vacuumRedirectAndPlaceholder(Relation index, Relation heaprel, Buffer buffer)
    xlrec.nToPlaceholder = 0;
    xlrec.snapshotConflictHorizon = InvalidTransactionId;
 
-   /* XXX: providing heap relation would allow more pruning */
-   vistest = GlobalVisTestFor(NULL);
+   vistest = GlobalVisTestFor(heaprel);
 
    START_CRIT_SECTION();