1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-20 05:03:10 +03:00

Fix pg_visibility regression failure with CLOBBER_CACHE_ALWAYS

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
This commit is contained in:
Tomas Vondra
2021-06-08 19:24:27 +02:00
parent bfeede9fa4
commit d1f0aa7696

View File

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