mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-02-05 19:09:58 +08:00
Initialize GIN metapage correctly when replaying metapage-update WAL record.
I broke this with my WAL format refactoring patch. Before that, the metapage was read from disk, and modified in-place regardless of the LSN. That was always a bit silly, as there's no need to read the old page version from disk disk when we're overwriting it anyway. So that was changed in 9.5, but I failed to add a GinInitPage call to initialize the page-headers correctly. Usually you wouldn't notice, because the metapage is already in the page cache and is not zeroed. One way to reproduce this is to perform a VACUUM on an already vacuumed table (so that the vacuum has no real work to do), immediately after a checkpoint, and then perform an immediate shutdown. After recovery, the page headers of the metapage will be incorrectly all-zeroes. Reported by Jeff Janes
This commit is contained in:
parent
f78329d594
commit
47fe4d25d5
@ -512,6 +512,7 @@ ginRedoUpdateMetapage(XLogReaderState *record)
|
||||
Assert(BufferGetBlockNumber(metabuffer) == GIN_METAPAGE_BLKNO);
|
||||
metapage = BufferGetPage(metabuffer);
|
||||
|
||||
GinInitPage(metapage, GIN_META, BufferGetPageSize(metabuffer));
|
||||
memcpy(GinPageGetMeta(metapage), &data->metadata, sizeof(GinMetaPageData));
|
||||
PageSetLSN(metapage, lsn);
|
||||
MarkBufferDirty(metabuffer);
|
||||
|
Loading…
Reference in New Issue
Block a user