diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index b099dab..0f617b8 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -3393,8 +3393,16 @@ heap_xlog_newpage(XLogRecPtr lsn, XLogRecord *record) Assert(record->xl_len == SizeOfHeapNewpage + BLCKSZ); memcpy(page, (char *) xlrec + SizeOfHeapNewpage, BLCKSZ); - PageSetLSN(page, lsn); - PageSetTLI(page, ThisTimeLineID); + /* + * The page may be uninitialized. If so, we can't set the LSN + * and TLI because that would corrupt the page. + */ + if (!PageIsNew(page)) + { + PageSetLSN(page, lsn); + PageSetTLI(page, ThisTimeLineID); + } + MarkBufferDirty(buffer); UnlockReleaseBuffer(buffer); } diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 8141c3a..32038a1 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -6151,8 +6151,15 @@ copy_relation_data(Relation rel, SMgrRelation dst) recptr = XLogInsert(RM_HEAP_ID, XLOG_HEAP_NEWPAGE, rdata); - PageSetLSN(page, recptr); - PageSetTLI(page, ThisTimeLineID); + /* + * The page may be uninitialized. If so, we can't set the LSN + * and TLI because that would corrupt the page. + */ + if (!PageIsNew(page)) + { + PageSetLSN(page, recptr); + PageSetTLI(page, ThisTimeLineID); + } END_CRIT_SECTION(); }