diff --git a/src/backend/access/heap/heapam_xlog.c b/src/backend/access/heap/heapam_xlog.c index 4d99d99080..b87f38befc 100644 --- a/src/backend/access/heap/heapam_xlog.c +++ b/src/backend/access/heap/heapam_xlog.c @@ -89,6 +89,10 @@ heap_xlog_vm_clear(XLogReaderState *record, RBM_ZERO_ON_ERROR, false, &vmbuffer) == BLK_NEEDS_REDO) { + /* initialize the page if it was read as zeros */ + if (PageIsNew(BufferGetPage(vmbuffer))) + PageInit(BufferGetPage(vmbuffer), BLCKSZ, 0); + if (visibilitymap_clear(reln, heap_blkno, vmbuffer, flags)) PageSetLSN(BufferGetPage(vmbuffer), lsn); } @@ -855,6 +859,10 @@ heap_xlog_update(XLogReaderState *record, bool hot_update) RBM_ZERO_ON_ERROR, false, &vmbuffer_new) == BLK_NEEDS_REDO) { + /* initialize the page if it was read as zeros */ + if (PageIsNew(BufferGetPage(vmbuffer_new))) + PageInit(BufferGetPage(vmbuffer_new), BLCKSZ, 0); + /* * If both the old and new heap pages were all-visible and their * VM bits are on the same VM page, that single VM page is @@ -894,6 +902,10 @@ heap_xlog_update(XLogReaderState *record, bool hot_update) RBM_ZERO_ON_ERROR, false, &vmbuffer_old) == BLK_NEEDS_REDO) { + /* initialize the page if it was read as zeros */ + if (PageIsNew(BufferGetPage(vmbuffer_old))) + PageInit(BufferGetPage(vmbuffer_old), BLCKSZ, 0); + if (visibilitymap_clear(reln, oldblk, vmbuffer_old, VISIBILITYMAP_VALID_BITS)) PageSetLSN(BufferGetPage(vmbuffer_old), lsn);