Fix pg_visibility regression failure with CLOBBER_CACHE_ALWAYS
authorTomas Vondra <tomas.vondra@postgresql.org>
Tue, 8 Jun 2021 17:24:27 +0000 (19:24 +0200)
committerTomas Vondra <tomas.vondra@postgresql.org>
Tue, 8 Jun 2021 17:33:11 +0000 (19:33 +0200)
Commit 8e03eb92e9 reverted a bit too much code, reintroducing one of the
issues fixed by 39b66a91bd - a page might have been left partially empty
after relcache invalidation.

Reported-By: Tom Lane
Author: Masahiko Sawada
Discussion: https://postgr.es/m/822752.1623032114@sss.pgh.pa.us
Discussion: https://postgr.es/m/CAD21AoA%3D%3Df2VSw3c-Cp_y%3DWLKHMKc1D6s7g3YWsCOvgaYPpJcg%40mail.gmail.com

src/backend/access/heap/hio.c

index c47c7522ca64e89323c1538c18ff9cf87dc3150f..ffc89685bff6fc48a3ba4c5f3a4c8ed129b35598 100644 (file)
@@ -407,19 +407,19 @@ RelationGetBufferForTuple(Relation relation, Size len,
         * target.
         */
        targetBlock = GetPageWithFreeSpace(relation, targetFreeSpace);
+   }
 
-       /*
-        * If the FSM knows nothing of the rel, try the last page before we
-        * give up and extend.  This avoids one-tuple-per-page syndrome during
-        * bootstrapping or in a recently-started system.
-        */
-       if (targetBlock == InvalidBlockNumber)
-       {
-           BlockNumber nblocks = RelationGetNumberOfBlocks(relation);
+   /*
+    * If the FSM knows nothing of the rel, try the last page before we
+    * give up and extend.  This avoids one-tuple-per-page syndrome during
+    * bootstrapping or in a recently-started system.
+    */
+   if (targetBlock == InvalidBlockNumber)
+   {
+       BlockNumber nblocks = RelationGetNumberOfBlocks(relation);
 
-           if (nblocks > 0)
-               targetBlock = nblocks - 1;
-       }
+       if (nblocks > 0)
+           targetBlock = nblocks - 1;
    }
 
 loop: