diff options
author | Tomas Vondra <tomas.vondra@postgresql.org> | 2021-01-24 00:24:50 +0100 |
---|---|---|
committer | Tomas Vondra <tomas.vondra@postgresql.org> | 2021-01-24 01:08:11 +0100 |
commit | 39b66a91bdebb00af71a2c6218412ecfc89a0e13 (patch) | |
tree | 07b52f0db151aee5d2a322212f0c1ab7dd4b56b3 /src/backend/access/heap/hio.c | |
parent | 183bbd1b6d4376f1b04c02b7a20b55019f6d84f4 (diff) | |
download | postgresql-39b66a91bdebb00af71a2c6218412ecfc89a0e13.tar.gz postgresql-39b66a91bdebb00af71a2c6218412ecfc89a0e13.zip |
Fix COPY FREEZE with CLOBBER_CACHE_ALWAYS
This adds code omitted from commit 7db0cd2145 by accident, which had
two consequences. Firstly, only rows inserted by heap_multi_insert were
frozen as expected when running COPY FREEZE, while heap_insert left
rows unfrozen. That however includes rows in TOAST tables, so a lot of
data might have been left unfrozen. Secondly, page might have been left
partially empty after relcache invalidation.
This addresses both of those issues.
Discussion: https://postgr.es/m/CABOikdN-ptGv0mZntrK2Q8OtfUuAjqaYMGmkdU1dCKFtUxVLrg@mail.gmail.com
Diffstat (limited to 'src/backend/access/heap/hio.c')
-rw-r--r-- | src/backend/access/heap/hio.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/src/backend/access/heap/hio.c b/src/backend/access/heap/hio.c index 2d23b3ef719..fb7ad0bab47 100644 --- a/src/backend/access/heap/hio.c +++ b/src/backend/access/heap/hio.c @@ -396,19 +396,19 @@ RelationGetBufferForTuple(Relation relation, Size len, * target. */ targetBlock = GetPageWithFreeSpace(relation, len + saveFreeSpace); + } - /* - * 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: |