From: Melanie Plageman Date: Wed, 15 Jul 2026 19:49:59 +0000 (-0400) Subject: Include last block in FSM vacuum of bulk extended relation X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=eabc9a9dd908a1be7d66dc26b378b1488fd14847;p=thirdparty%2Fpostgresql.git Include last block in FSM vacuum of bulk extended relation When bulk-extending a relation, we add the newly-added blocks that we won't immediately use to the free space map and then call FreeSpaceMapVacuumRange() to propagate that free space up the FSM tree, so other backends can find and reuse it. However, the end block argument to FreeSpaceMapVacuumRange() is exclusive, and we passed the number of the last added block (since 00d1e02be24). If that block was the first one covered by a new FSM page, its free space wasn't propagated up the tree and was therefore invisible to FSM searches until the next FSM vacuum. Fix by passing the block number one past the last added block, so the full range is vacuumed. Author: Jingtang Zhang Reviewed-by: Melanie Plageman Discussion: https://postgr.es/m/flat/CAPsk3_Bx_vdybN%3D-DZu8HLStf%2BXnuFUBkLwxouONSMkWuO9oug%40mail.gmail.com Backpatch-through: 16 --- diff --git a/src/backend/access/heap/hio.c b/src/backend/access/heap/hio.c index c482c9d61b2..242564d0c75 100644 --- a/src/backend/access/heap/hio.c +++ b/src/backend/access/heap/hio.c @@ -403,7 +403,7 @@ RelationAddBlocks(Relation relation, BulkInsertState bistate, { BlockNumber first_fsm_block = first_block + not_in_fsm_pages; - FreeSpaceMapVacuumRange(relation, first_fsm_block, last_block); + FreeSpaceMapVacuumRange(relation, first_fsm_block, last_block + 1); } if (bistate)