diff --git a/contrib/pageinspect/Makefile b/contrib/pageinspect/Makefile
index 13ba6d39111..ce52151fade 100644
--- a/contrib/pageinspect/Makefile
+++ b/contrib/pageinspect/Makefile
@@ -4,7 +4,8 @@ MODULE_big = pageinspect
OBJS = rawpage.o heapfuncs.o btreefuncs.o fsmfuncs.o
EXTENSION = pageinspect
-DATA = pageinspect--1.0.sql pageinspect--unpackaged--1.0.sql
+DATA = pageinspect--1.0.sql pageinspect--unpackaged--1.0.sql \
+ pageinspect--1.1.sql pageinspect--1.0--1.1.sql
ifdef USE_PGXS
PG_CONFIG = pg_config
diff --git a/contrib/pageinspect/pageinspect.control b/contrib/pageinspect/pageinspect.control
index f9da0e86edc..a412cf13ddb 100644
--- a/contrib/pageinspect/pageinspect.control
+++ b/contrib/pageinspect/pageinspect.control
@@ -1,5 +1,5 @@
# pageinspect extension
comment = 'inspect the contents of database pages at a low level'
-default_version = '1.0'
+default_version = '1.1'
module_pathname = '$libdir/pageinspect'
relocatable = true
diff --git a/contrib/pageinspect/rawpage.c b/contrib/pageinspect/rawpage.c
index 222e043368b..e3ffaf4e4f2 100644
--- a/contrib/pageinspect/rawpage.c
+++ b/contrib/pageinspect/rawpage.c
@@ -211,7 +211,7 @@ page_header(PG_FUNCTION_ARGS)
(uint32) (lsn >> 32), (uint32) lsn);
values[0] = CStringGetTextDatum(lsnchar);
- values[1] = UInt16GetDatum(PageGetTLI(page));
+ values[1] = UInt16GetDatum(page->pd_checksum);
values[2] = UInt16GetDatum(page->pd_flags);
values[3] = UInt16GetDatum(page->pd_lower);
values[4] = UInt16GetDatum(page->pd_upper);
diff --git a/doc/src/sgml/pageinspect.sgml b/doc/src/sgml/pageinspect.sgml
index acbb05bc9c5..c4ff086c978 100644
--- a/doc/src/sgml/pageinspect.sgml
+++ b/doc/src/sgml/pageinspect.sgml
@@ -64,9 +64,9 @@
passed as argument. For example:
test=# SELECT * FROM page_header(get_raw_page('pg_class', 0));
- lsn | tli | flags | lower | upper | special | pagesize | version | prune_xid
------------+-----+-------+-------+-------+---------+----------+---------+-----------
- 0/24A1B50 | 1 | 1 | 232 | 368 | 8192 | 8192 | 4 | 0
+ lsn | checksum | flags | lower | upper | special | pagesize | version | prune_xid
+-----------+----------+--------+-------+-------+---------+----------+---------+-----------
+ 0/24A1B50 | 1 | 1 | 232 | 368 | 8192 | 8192 | 4 | 0
The returned columns correspond to the fields in the
PageHeaderData> struct.
diff --git a/src/backend/access/gin/ginbtree.c b/src/backend/access/gin/ginbtree.c
index 266d76b6200..7acc8f646ec 100644
--- a/src/backend/access/gin/ginbtree.c
+++ b/src/backend/access/gin/ginbtree.c
@@ -308,7 +308,6 @@ ginInsertValue(GinBtree btree, GinBtreeStack *stack, GinStatsData *buildStats)
recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_INSERT, rdata);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
LockBuffer(stack->buffer, GIN_UNLOCK);
@@ -377,11 +376,8 @@ ginInsertValue(GinBtree btree, GinBtreeStack *stack, GinStatsData *buildStats)
recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_SPLIT, rdata);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
PageSetLSN(lpage, recptr);
- PageSetTLI(lpage, ThisTimeLineID);
PageSetLSN(rpage, recptr);
- PageSetTLI(rpage, ThisTimeLineID);
}
UnlockReleaseBuffer(rbuffer);
@@ -426,9 +422,7 @@ ginInsertValue(GinBtree btree, GinBtreeStack *stack, GinStatsData *buildStats)
recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_SPLIT, rdata);
PageSetLSN(lpage, recptr);
- PageSetTLI(lpage, ThisTimeLineID);
PageSetLSN(rpage, recptr);
- PageSetTLI(rpage, ThisTimeLineID);
}
UnlockReleaseBuffer(rbuffer);
END_CRIT_SECTION();
diff --git a/src/backend/access/gin/ginfast.c b/src/backend/access/gin/ginfast.c
index 2b2508f8f77..4f2c11810a4 100644
--- a/src/backend/access/gin/ginfast.c
+++ b/src/backend/access/gin/ginfast.c
@@ -127,7 +127,6 @@ writeListPage(Relation index, Buffer buffer,
recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_INSERT_LISTPAGE, rdata);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
/* get free space before releasing buffer */
@@ -408,12 +407,10 @@ ginHeapTupleFastInsert(GinState *ginstate, GinTupleCollector *collector)
recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_UPDATE_META_PAGE, rdata);
PageSetLSN(metapage, recptr);
- PageSetTLI(metapage, ThisTimeLineID);
if (buffer != InvalidBuffer)
{
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
}
@@ -594,13 +591,11 @@ shiftList(Relation index, Buffer metabuffer, BlockNumber newHead,
recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_DELETE_LISTPAGE, rdata);
PageSetLSN(metapage, recptr);
- PageSetTLI(metapage, ThisTimeLineID);
for (i = 0; i < data.ndeleted; i++)
{
page = BufferGetPage(buffers[i]);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
}
diff --git a/src/backend/access/gin/gininsert.c b/src/backend/access/gin/gininsert.c
index 90627ff6ac1..beaa65317f3 100644
--- a/src/backend/access/gin/gininsert.c
+++ b/src/backend/access/gin/gininsert.c
@@ -84,7 +84,6 @@ createPostingTree(Relation index, ItemPointerData *items, uint32 nitems)
recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_CREATE_PTREE, rdata);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
UnlockReleaseBuffer(buffer);
@@ -431,11 +430,9 @@ ginbuild(PG_FUNCTION_ARGS)
page = BufferGetPage(RootBuffer);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
page = BufferGetPage(MetaBuffer);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
UnlockReleaseBuffer(MetaBuffer);
diff --git a/src/backend/access/gin/ginutil.c b/src/backend/access/gin/ginutil.c
index 24d671272e7..8a716810517 100644
--- a/src/backend/access/gin/ginutil.c
+++ b/src/backend/access/gin/ginutil.c
@@ -593,7 +593,6 @@ ginUpdateStats(Relation index, const GinStatsData *stats)
recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_UPDATE_META_PAGE, &rdata);
PageSetLSN(metapage, recptr);
- PageSetTLI(metapage, ThisTimeLineID);
}
UnlockReleaseBuffer(metabuffer);
diff --git a/src/backend/access/gin/ginvacuum.c b/src/backend/access/gin/ginvacuum.c
index f619397a75f..b84d3a30de3 100644
--- a/src/backend/access/gin/ginvacuum.c
+++ b/src/backend/access/gin/ginvacuum.c
@@ -147,7 +147,6 @@ xlogVacuumPage(Relation index, Buffer buffer)
recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_VACUUM_PAGE, rdata);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
static bool
@@ -350,14 +349,11 @@ ginDeletePage(GinVacuumState *gvs, BlockNumber deleteBlkno, BlockNumber leftBlkn
recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_DELETE_PAGE, rdata);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
PageSetLSN(parentPage, recptr);
- PageSetTLI(parentPage, ThisTimeLineID);
if (leftBlkno != InvalidBlockNumber)
{
page = BufferGetPage(lBuffer);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
}
diff --git a/src/backend/access/gin/ginxlog.c b/src/backend/access/gin/ginxlog.c
index fedbc72e9a5..5daabb0eef9 100644
--- a/src/backend/access/gin/ginxlog.c
+++ b/src/backend/access/gin/ginxlog.c
@@ -87,7 +87,6 @@ ginRedoCreateIndex(XLogRecPtr lsn, XLogRecord *record)
GinInitMetabuffer(MetaBuffer);
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(MetaBuffer);
RootBuffer = XLogReadBuffer(*node, GIN_ROOT_BLKNO, true);
@@ -97,7 +96,6 @@ ginRedoCreateIndex(XLogRecPtr lsn, XLogRecord *record)
GinInitBuffer(RootBuffer, GIN_LEAF);
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(RootBuffer);
UnlockReleaseBuffer(RootBuffer);
@@ -124,7 +122,6 @@ ginRedoCreatePTree(XLogRecPtr lsn, XLogRecord *record)
GinPageGetOpaque(page)->maxoff = data->nitem;
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
@@ -242,7 +239,6 @@ ginRedoInsert(XLogRecPtr lsn, XLogRecord *record)
}
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
@@ -333,11 +329,9 @@ ginRedoSplit(XLogRecPtr lsn, XLogRecord *record)
}
PageSetLSN(rpage, lsn);
- PageSetTLI(rpage, ThisTimeLineID);
MarkBufferDirty(rbuffer);
PageSetLSN(lpage, lsn);
- PageSetTLI(lpage, ThisTimeLineID);
MarkBufferDirty(lbuffer);
if (!data->isLeaf && data->updateBlkno != InvalidBlockNumber)
@@ -362,7 +356,6 @@ ginRedoSplit(XLogRecPtr lsn, XLogRecord *record)
}
PageSetLSN(rootPage, lsn);
- PageSetTLI(rootPage, ThisTimeLineID);
MarkBufferDirty(rootBuf);
UnlockReleaseBuffer(rootBuf);
@@ -424,7 +417,6 @@ ginRedoVacuumPage(XLogRecPtr lsn, XLogRecord *record)
}
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
@@ -453,7 +445,6 @@ ginRedoDeletePage(XLogRecPtr lsn, XLogRecord *record)
Assert(GinPageIsData(page));
GinPageGetOpaque(page)->flags = GIN_DELETED;
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(dbuffer);
}
}
@@ -473,7 +464,6 @@ ginRedoDeletePage(XLogRecPtr lsn, XLogRecord *record)
Assert(!GinPageIsLeaf(page));
GinPageDeletePostingItem(page, data->parentOffset);
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(pbuffer);
}
}
@@ -492,7 +482,6 @@ ginRedoDeletePage(XLogRecPtr lsn, XLogRecord *record)
Assert(GinPageIsData(page));
GinPageGetOpaque(page)->rightlink = data->rightLink;
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(lbuffer);
}
UnlockReleaseBuffer(lbuffer);
@@ -522,7 +511,6 @@ ginRedoUpdateMetapage(XLogRecPtr lsn, XLogRecord *record)
{
memcpy(GinPageGetMeta(metapage), &data->metadata, sizeof(GinMetaPageData));
PageSetLSN(metapage, lsn);
- PageSetTLI(metapage, ThisTimeLineID);
MarkBufferDirty(metabuffer);
}
@@ -569,7 +557,6 @@ ginRedoUpdateMetapage(XLogRecPtr lsn, XLogRecord *record)
GinPageGetOpaque(page)->maxoff++;
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
UnlockReleaseBuffer(buffer);
@@ -595,7 +582,6 @@ ginRedoUpdateMetapage(XLogRecPtr lsn, XLogRecord *record)
GinPageGetOpaque(page)->rightlink = data->newRightlink;
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
UnlockReleaseBuffer(buffer);
@@ -655,7 +641,6 @@ ginRedoInsertListPage(XLogRecPtr lsn, XLogRecord *record)
}
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
@@ -681,7 +666,6 @@ ginRedoDeleteListPages(XLogRecPtr lsn, XLogRecord *record)
{
memcpy(GinPageGetMeta(metapage), &data->metadata, sizeof(GinMetaPageData));
PageSetLSN(metapage, lsn);
- PageSetTLI(metapage, ThisTimeLineID);
MarkBufferDirty(metabuffer);
}
@@ -708,7 +692,6 @@ ginRedoDeleteListPages(XLogRecPtr lsn, XLogRecord *record)
GinPageGetOpaque(page)->flags = GIN_DELETED;
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
diff --git a/src/backend/access/gist/gist.c b/src/backend/access/gist/gist.c
index eba95f18664..99cbcaa58ee 100644
--- a/src/backend/access/gist/gist.c
+++ b/src/backend/access/gist/gist.c
@@ -410,7 +410,6 @@ gistplacetopage(Relation rel, Size freespace, GISTSTATE *giststate,
for (ptr = dist; ptr; ptr = ptr->next)
{
PageSetLSN(ptr->page, recptr);
- PageSetTLI(ptr->page, ThisTimeLineID);
}
/*
@@ -458,7 +457,6 @@ gistplacetopage(Relation rel, Size freespace, GISTSTATE *giststate,
leftchildbuf);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
else
{
@@ -491,7 +489,6 @@ gistplacetopage(Relation rel, Size freespace, GISTSTATE *giststate,
GistClearFollowRight(leftpg);
PageSetLSN(leftpg, recptr);
- PageSetTLI(leftpg, ThisTimeLineID);
}
END_CRIT_SECTION();
diff --git a/src/backend/access/gist/gistbuild.c b/src/backend/access/gist/gistbuild.c
index 0cf22cdf3a8..46f7ce65635 100644
--- a/src/backend/access/gist/gistbuild.c
+++ b/src/backend/access/gist/gistbuild.c
@@ -191,7 +191,6 @@ gistbuild(PG_FUNCTION_ARGS)
recptr = XLogInsert(RM_GIST_ID, XLOG_GIST_CREATE_INDEX, &rdata);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
else
PageSetLSN(page, gistGetFakeLSN(heap));
diff --git a/src/backend/access/gist/gistvacuum.c b/src/backend/access/gist/gistvacuum.c
index 1d9f8320166..59c3105b083 100644
--- a/src/backend/access/gist/gistvacuum.c
+++ b/src/backend/access/gist/gistvacuum.c
@@ -235,7 +235,6 @@ gistbulkdelete(PG_FUNCTION_ARGS)
todelete, ntodelete,
NULL, 0, InvalidBuffer);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
else
PageSetLSN(page, gistGetFakeLSN(rel));
diff --git a/src/backend/access/gist/gistxlog.c b/src/backend/access/gist/gistxlog.c
index c18065a780f..3daeea396be 100644
--- a/src/backend/access/gist/gistxlog.c
+++ b/src/backend/access/gist/gistxlog.c
@@ -70,7 +70,6 @@ gistRedoClearFollowRight(XLogRecPtr lsn, XLogRecord *record, int block_index,
GistClearFollowRight(page);
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
UnlockReleaseBuffer(buffer);
@@ -185,7 +184,6 @@ gistRedoPageUpdateRecord(XLogRecPtr lsn, XLogRecord *record)
GistPageGetOpaque(page)->rightlink = InvalidBlockNumber;
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
}
@@ -289,7 +287,6 @@ gistRedoPageSplitRecord(XLogRecPtr lsn, XLogRecord *record)
}
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
if (i == 0)
@@ -324,7 +321,6 @@ gistRedoCreateIndex(XLogRecPtr lsn, XLogRecord *record)
GISTInitBuffer(buffer, F_LEAF);
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index 5250ec7f419..151422a1b06 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -2129,7 +2129,6 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid,
recptr = XLogInsert(RM_HEAP_ID, info, rdata);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
@@ -2426,7 +2425,6 @@ heap_multi_insert(Relation relation, HeapTuple *tuples, int ntuples,
recptr = XLogInsert(RM_HEAP2_ID, info, rdata);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
@@ -2787,7 +2785,6 @@ l1:
recptr = XLogInsert(RM_HEAP_ID, XLOG_HEAP_DELETE, rdata);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
@@ -3570,10 +3567,8 @@ l2:
if (newbuf != buffer)
{
PageSetLSN(BufferGetPage(newbuf), recptr);
- PageSetTLI(BufferGetPage(newbuf), ThisTimeLineID);
}
PageSetLSN(BufferGetPage(buffer), recptr);
- PageSetTLI(BufferGetPage(buffer), ThisTimeLineID);
}
END_CRIT_SECTION();
@@ -4472,7 +4467,6 @@ failed:
recptr = XLogInsert(RM_HEAP_ID, XLOG_HEAP_LOCK, rdata);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
@@ -4889,7 +4883,6 @@ l4:
recptr = XLogInsert(RM_HEAP2_ID, XLOG_HEAP2_LOCK_UPDATED, rdata);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
@@ -5033,7 +5026,6 @@ heap_inplace_update(Relation relation, HeapTuple tuple)
recptr = XLogInsert(RM_HEAP_ID, XLOG_HEAP_INPLACE, rdata);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
@@ -5915,7 +5907,6 @@ log_newpage(RelFileNode *rnode, ForkNumber forkNum, BlockNumber blkno,
if (!PageIsNew(page))
{
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
@@ -5964,7 +5955,6 @@ log_newpage_buffer(Buffer buffer)
if (!PageIsNew(page))
{
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
return recptr;
@@ -6066,7 +6056,6 @@ heap_xlog_clean(XLogRecPtr lsn, XLogRecord *record)
*/
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
@@ -6134,7 +6123,6 @@ heap_xlog_freeze(XLogRecPtr lsn, XLogRecord *record)
}
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
}
@@ -6262,13 +6250,12 @@ heap_xlog_newpage(XLogRecPtr lsn, XLogRecord *record)
memcpy(page, (char *) xlrec + SizeOfHeapNewpage, BLCKSZ);
/*
- * The page may be uninitialized. If so, we can't set the LSN and TLI
- * because that would corrupt the page.
+ * The page may be uninitialized. If so, we can't set the LSN because that
+ * would corrupt the page.
*/
if (!PageIsNew(page))
{
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
}
MarkBufferDirty(buffer);
@@ -6374,7 +6361,6 @@ heap_xlog_delete(XLogRecPtr lsn, XLogRecord *record)
/* Make sure there is no forward chain link in t_ctid */
htup->t_ctid = xlrec->target.tid;
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
}
@@ -6473,7 +6459,6 @@ heap_xlog_insert(XLogRecPtr lsn, XLogRecord *record)
freespace = PageGetHeapFreeSpace(page); /* needed to update FSM below */
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
if (xlrec->all_visible_cleared)
PageClearAllVisible(page);
@@ -6620,7 +6605,6 @@ heap_xlog_multi_insert(XLogRecPtr lsn, XLogRecord *record)
freespace = PageGetHeapFreeSpace(page); /* needed to update FSM below */
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
if (xlrec->all_visible_cleared)
PageClearAllVisible(page);
@@ -6762,7 +6746,6 @@ heap_xlog_update(XLogRecPtr lsn, XLogRecord *record, bool hot_update)
}
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(obuffer);
/* Deal with new tuple */
@@ -6861,7 +6844,6 @@ newsame:;
freespace = PageGetHeapFreeSpace(page); /* needed to update FSM below */
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(nbuffer);
UnlockReleaseBuffer(nbuffer);
@@ -6936,7 +6918,6 @@ heap_xlog_lock(XLogRecPtr lsn, XLogRecord *record)
/* Make sure there is no forward chain link in t_ctid */
htup->t_ctid = xlrec->target.tid;
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
}
@@ -6986,7 +6967,6 @@ heap_xlog_lock_updated(XLogRecPtr lsn, XLogRecord *record)
HeapTupleHeaderSetXmax(htup, xlrec->xmax);
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
}
@@ -7042,7 +7022,6 @@ heap_xlog_inplace(XLogRecPtr lsn, XLogRecord *record)
newlen);
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
}
diff --git a/src/backend/access/heap/pruneheap.c b/src/backend/access/heap/pruneheap.c
index c723119ea80..0fc032e128b 100644
--- a/src/backend/access/heap/pruneheap.c
+++ b/src/backend/access/heap/pruneheap.c
@@ -244,7 +244,6 @@ heap_page_prune(Relation relation, Buffer buffer, TransactionId OldestXmin,
prstate.latestRemovedXid);
PageSetLSN(BufferGetPage(buffer), recptr);
- PageSetTLI(BufferGetPage(buffer), ThisTimeLineID);
}
}
else
diff --git a/src/backend/access/heap/visibilitymap.c b/src/backend/access/heap/visibilitymap.c
index 65b372d16b5..3209c87bb86 100644
--- a/src/backend/access/heap/visibilitymap.c
+++ b/src/backend/access/heap/visibilitymap.c
@@ -274,7 +274,6 @@ visibilitymap_set(Relation rel, BlockNumber heapBlk, XLogRecPtr recptr,
recptr = log_heap_visible(rel->rd_node, heapBlk, buf,
cutoff_xid);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c
index 6ed51fea156..63e099b0fd9 100644
--- a/src/backend/access/nbtree/nbtinsert.c
+++ b/src/backend/access/nbtree/nbtinsert.c
@@ -858,11 +858,9 @@ _bt_insertonpg(Relation rel,
if (BufferIsValid(metabuf))
{
PageSetLSN(metapg, recptr);
- PageSetTLI(metapg, ThisTimeLineID);
}
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
@@ -946,7 +944,6 @@ _bt_split(Relation rel, Buffer buf, OffsetNumber firstright,
* examine these fields and possibly dump them in a page image.
*/
PageSetLSN(leftpage, PageGetLSN(origpage));
- PageSetTLI(leftpage, PageGetTLI(origpage));
/* init btree private data */
oopaque = (BTPageOpaque) PageGetSpecialPointer(origpage);
@@ -1319,13 +1316,10 @@ _bt_split(Relation rel, Buffer buf, OffsetNumber firstright,
recptr = XLogInsert(RM_BTREE_ID, xlinfo, rdata);
PageSetLSN(origpage, recptr);
- PageSetTLI(origpage, ThisTimeLineID);
PageSetLSN(rightpage, recptr);
- PageSetTLI(rightpage, ThisTimeLineID);
if (!P_RIGHTMOST(ropaque))
{
PageSetLSN(spage, recptr);
- PageSetTLI(spage, ThisTimeLineID);
}
}
@@ -1961,9 +1955,7 @@ _bt_newroot(Relation rel, Buffer lbuf, Buffer rbuf)
recptr = XLogInsert(RM_BTREE_ID, XLOG_BTREE_NEWROOT, rdata);
PageSetLSN(rootpage, recptr);
- PageSetTLI(rootpage, ThisTimeLineID);
PageSetLSN(metapg, recptr);
- PageSetTLI(metapg, ThisTimeLineID);
}
END_CRIT_SECTION();
diff --git a/src/backend/access/nbtree/nbtpage.c b/src/backend/access/nbtree/nbtpage.c
index 9013f41727b..1d9cb7d1a06 100644
--- a/src/backend/access/nbtree/nbtpage.c
+++ b/src/backend/access/nbtree/nbtpage.c
@@ -241,9 +241,7 @@ _bt_getroot(Relation rel, int access)
recptr = XLogInsert(RM_BTREE_ID, XLOG_BTREE_NEWROOT, &rdata);
PageSetLSN(rootpage, recptr);
- PageSetTLI(rootpage, ThisTimeLineID);
PageSetLSN(metapg, recptr);
- PageSetTLI(metapg, ThisTimeLineID);
}
END_CRIT_SECTION();
@@ -534,8 +532,8 @@ _bt_log_reuse_page(Relation rel, BlockNumber blkno, TransactionId latestRemovedX
START_CRIT_SECTION();
/*
- * We don't do MarkBufferDirty here because we're about initialise the
- * page, and nobody else can see it yet.
+ * We don't do MarkBufferDirty here because we're about to initialise
+ * the page, and nobody else can see it yet.
*/
/* XLOG stuff */
@@ -554,8 +552,8 @@ _bt_log_reuse_page(Relation rel, BlockNumber blkno, TransactionId latestRemovedX
XLogInsert(RM_BTREE_ID, XLOG_BTREE_REUSE_PAGE, rdata);
/*
- * We don't do PageSetLSN or PageSetTLI here because we're about
- * initialise the page, so no need.
+ * We don't do PageSetLSN here because we're about to initialise
+ * the page, so no need.
*/
}
@@ -863,7 +861,6 @@ _bt_delitems_vacuum(Relation rel, Buffer buf,
recptr = XLogInsert(RM_BTREE_ID, XLOG_BTREE_VACUUM, rdata);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
@@ -951,7 +948,6 @@ _bt_delitems_delete(Relation rel, Buffer buf,
recptr = XLogInsert(RM_BTREE_ID, XLOG_BTREE_DELETE, rdata);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
@@ -1533,22 +1529,17 @@ _bt_pagedel(Relation rel, Buffer buf, BTStack stack)
if (BufferIsValid(metabuf))
{
PageSetLSN(metapg, recptr);
- PageSetTLI(metapg, ThisTimeLineID);
}
page = BufferGetPage(pbuf);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
page = BufferGetPage(rbuf);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
page = BufferGetPage(buf);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
if (BufferIsValid(lbuf))
{
page = BufferGetPage(lbuf);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
}
diff --git a/src/backend/access/nbtree/nbtsort.c b/src/backend/access/nbtree/nbtsort.c
index df867a6a1a7..abd99954e93 100644
--- a/src/backend/access/nbtree/nbtsort.c
+++ b/src/backend/access/nbtree/nbtsort.c
@@ -276,11 +276,6 @@ _bt_blwritepage(BTWriteState *wstate, Page page, BlockNumber blkno)
/* We use the heap NEWPAGE record type for this */
log_newpage(&wstate->index->rd_node, MAIN_FORKNUM, blkno, page);
}
- else
- {
- /* Leave the page LSN zero if not WAL-logged, but set TLI anyway */
- PageSetTLI(page, ThisTimeLineID);
- }
/*
* If we have to write pages nonsequentially, fill in the space with
diff --git a/src/backend/access/nbtree/nbtxlog.c b/src/backend/access/nbtree/nbtxlog.c
index cd2a6c60a53..4aabdba3d9e 100644
--- a/src/backend/access/nbtree/nbtxlog.c
+++ b/src/backend/access/nbtree/nbtxlog.c
@@ -186,7 +186,6 @@ _bt_restore_meta(RelFileNode rnode, XLogRecPtr lsn,
((char *) md + sizeof(BTMetaPageData)) - (char *) metapg;
PageSetLSN(metapg, lsn);
- PageSetTLI(metapg, ThisTimeLineID);
MarkBufferDirty(metabuf);
UnlockReleaseBuffer(metabuf);
}
@@ -241,7 +240,6 @@ btree_xlog_insert(bool isleaf, bool ismeta,
elog(PANIC, "btree_insert_redo: failed to add item");
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
}
@@ -358,7 +356,6 @@ btree_xlog_split(bool onleft, bool isroot,
}
PageSetLSN(rpage, lsn);
- PageSetTLI(rpage, ThisTimeLineID);
MarkBufferDirty(rbuf);
/* don't release the buffer yet; we touch right page's first item below */
@@ -430,7 +427,6 @@ btree_xlog_split(bool onleft, bool isroot,
lopaque->btpo_cycleid = 0;
PageSetLSN(lpage, lsn);
- PageSetTLI(lpage, ThisTimeLineID);
MarkBufferDirty(lbuf);
}
@@ -466,7 +462,6 @@ btree_xlog_split(bool onleft, bool isroot,
pageop->btpo_prev = xlrec->rightsib;
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
UnlockReleaseBuffer(buffer);
@@ -563,7 +558,6 @@ btree_xlog_vacuum(XLogRecPtr lsn, XLogRecord *record)
opaque->btpo_flags &= ~BTP_HAS_GARBAGE;
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
}
@@ -780,7 +774,6 @@ btree_xlog_delete(XLogRecPtr lsn, XLogRecord *record)
opaque->btpo_flags &= ~BTP_HAS_GARBAGE;
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
}
@@ -851,7 +844,6 @@ btree_xlog_delete_page(uint8 info, XLogRecPtr lsn, XLogRecord *record)
}
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
}
@@ -877,7 +869,6 @@ btree_xlog_delete_page(uint8 info, XLogRecPtr lsn, XLogRecord *record)
pageop->btpo_prev = leftsib;
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
}
@@ -905,7 +896,6 @@ btree_xlog_delete_page(uint8 info, XLogRecPtr lsn, XLogRecord *record)
pageop->btpo_next = rightsib;
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
}
@@ -928,7 +918,6 @@ btree_xlog_delete_page(uint8 info, XLogRecPtr lsn, XLogRecord *record)
pageop->btpo_cycleid = 0;
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
@@ -992,7 +981,6 @@ btree_xlog_newroot(XLogRecPtr lsn, XLogRecord *record)
}
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
diff --git a/src/backend/access/spgist/spgdoinsert.c b/src/backend/access/spgist/spgdoinsert.c
index 1d9cbf7cd10..5f6bcdd6b72 100644
--- a/src/backend/access/spgist/spgdoinsert.c
+++ b/src/backend/access/spgist/spgdoinsert.c
@@ -308,13 +308,11 @@ addLeafTuple(Relation index, SpGistState *state, SpGistLeafTuple leafTuple,
recptr = XLogInsert(RM_SPGIST_ID, XLOG_SPGIST_ADD_LEAF, rdata);
PageSetLSN(current->page, recptr);
- PageSetTLI(current->page, ThisTimeLineID);
/* update parent only if we actually changed it */
if (xlrec.blknoParent != InvalidBlockNumber)
{
PageSetLSN(parent->page, recptr);
- PageSetTLI(parent->page, ThisTimeLineID);
}
}
@@ -548,11 +546,8 @@ moveLeafs(Relation index, SpGistState *state,
recptr = XLogInsert(RM_SPGIST_ID, XLOG_SPGIST_MOVE_LEAFS, rdata);
PageSetLSN(current->page, recptr);
- PageSetTLI(current->page, ThisTimeLineID);
PageSetLSN(npage, recptr);
- PageSetTLI(npage, ThisTimeLineID);
PageSetLSN(parent->page, recptr);
- PageSetTLI(parent->page, ThisTimeLineID);
}
END_CRIT_SECTION();
@@ -1401,7 +1396,6 @@ doPickSplit(Relation index, SpGistState *state,
Page page = BufferGetPage(newLeafBuffer);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
if (saveCurrent.buffer != InvalidBuffer)
@@ -1409,16 +1403,13 @@ doPickSplit(Relation index, SpGistState *state,
Page page = BufferGetPage(saveCurrent.buffer);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
PageSetLSN(current->page, recptr);
- PageSetTLI(current->page, ThisTimeLineID);
if (parent->buffer != InvalidBuffer)
{
PageSetLSN(parent->page, recptr);
- PageSetTLI(parent->page, ThisTimeLineID);
}
}
@@ -1557,7 +1548,6 @@ spgAddNodeAction(Relation index, SpGistState *state,
recptr = XLogInsert(RM_SPGIST_ID, XLOG_SPGIST_ADD_NODE, rdata);
PageSetLSN(current->page, recptr);
- PageSetTLI(current->page, ThisTimeLineID);
}
END_CRIT_SECTION();
@@ -1667,11 +1657,8 @@ spgAddNodeAction(Relation index, SpGistState *state,
/* we don't bother to check if any of these are redundant */
PageSetLSN(current->page, recptr);
- PageSetTLI(current->page, ThisTimeLineID);
PageSetLSN(parent->page, recptr);
- PageSetTLI(parent->page, ThisTimeLineID);
PageSetLSN(saveCurrent.page, recptr);
- PageSetTLI(saveCurrent.page, ThisTimeLineID);
}
END_CRIT_SECTION();
@@ -1831,12 +1818,10 @@ spgSplitNodeAction(Relation index, SpGistState *state,
recptr = XLogInsert(RM_SPGIST_ID, XLOG_SPGIST_SPLIT_TUPLE, rdata);
PageSetLSN(current->page, recptr);
- PageSetTLI(current->page, ThisTimeLineID);
if (newBuffer != InvalidBuffer)
{
PageSetLSN(BufferGetPage(newBuffer), recptr);
- PageSetTLI(BufferGetPage(newBuffer), ThisTimeLineID);
}
}
diff --git a/src/backend/access/spgist/spginsert.c b/src/backend/access/spgist/spginsert.c
index 4f7df3dcc39..ac01fd292c1 100644
--- a/src/backend/access/spgist/spginsert.c
+++ b/src/backend/access/spgist/spginsert.c
@@ -105,11 +105,8 @@ spgbuild(PG_FUNCTION_ARGS)
recptr = XLogInsert(RM_SPGIST_ID, XLOG_SPGIST_CREATE_INDEX, &rdata);
PageSetLSN(BufferGetPage(metabuffer), recptr);
- PageSetTLI(BufferGetPage(metabuffer), ThisTimeLineID);
PageSetLSN(BufferGetPage(rootbuffer), recptr);
- PageSetTLI(BufferGetPage(rootbuffer), ThisTimeLineID);
PageSetLSN(BufferGetPage(nullbuffer), recptr);
- PageSetTLI(BufferGetPage(nullbuffer), ThisTimeLineID);
}
END_CRIT_SECTION();
diff --git a/src/backend/access/spgist/spgvacuum.c b/src/backend/access/spgist/spgvacuum.c
index 23c0ec6e52a..1874bdd0953 100644
--- a/src/backend/access/spgist/spgvacuum.c
+++ b/src/backend/access/spgist/spgvacuum.c
@@ -392,7 +392,6 @@ vacuumLeafPage(spgBulkDeleteState *bds, Relation index, Buffer buffer,
recptr = XLogInsert(RM_SPGIST_ID, XLOG_SPGIST_VACUUM_LEAF, rdata);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
@@ -473,7 +472,6 @@ vacuumLeafRoot(spgBulkDeleteState *bds, Relation index, Buffer buffer)
recptr = XLogInsert(RM_SPGIST_ID, XLOG_SPGIST_VACUUM_ROOT, rdata);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
@@ -594,7 +592,6 @@ vacuumRedirectAndPlaceholder(Relation index, Buffer buffer)
recptr = XLogInsert(RM_SPGIST_ID, XLOG_SPGIST_VACUUM_REDIRECT, rdata);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
diff --git a/src/backend/access/spgist/spgxlog.c b/src/backend/access/spgist/spgxlog.c
index 935f5628b9f..3f5556f65f7 100644
--- a/src/backend/access/spgist/spgxlog.c
+++ b/src/backend/access/spgist/spgxlog.c
@@ -84,7 +84,6 @@ spgRedoCreateIndex(XLogRecPtr lsn, XLogRecord *record)
page = (Page) BufferGetPage(buffer);
SpGistInitMetapage(page);
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
@@ -93,7 +92,6 @@ spgRedoCreateIndex(XLogRecPtr lsn, XLogRecord *record)
SpGistInitBuffer(buffer, SPGIST_LEAF);
page = (Page) BufferGetPage(buffer);
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
@@ -102,7 +100,6 @@ spgRedoCreateIndex(XLogRecPtr lsn, XLogRecord *record)
SpGistInitBuffer(buffer, SPGIST_LEAF | SPGIST_NULLS);
page = (Page) BufferGetPage(buffer);
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
}
@@ -171,7 +168,6 @@ spgRedoAddLeaf(XLogRecPtr lsn, XLogRecord *record)
}
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
UnlockReleaseBuffer(buffer);
@@ -198,7 +194,6 @@ spgRedoAddLeaf(XLogRecPtr lsn, XLogRecord *record)
xldata->blknoLeaf, xldata->offnumLeaf);
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
UnlockReleaseBuffer(buffer);
@@ -264,7 +259,6 @@ spgRedoMoveLeafs(XLogRecPtr lsn, XLogRecord *record)
}
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
UnlockReleaseBuffer(buffer);
@@ -289,7 +283,6 @@ spgRedoMoveLeafs(XLogRecPtr lsn, XLogRecord *record)
toInsert[nInsert - 1]);
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
UnlockReleaseBuffer(buffer);
@@ -316,7 +309,6 @@ spgRedoMoveLeafs(XLogRecPtr lsn, XLogRecord *record)
xldata->blknoDst, toInsert[nInsert - 1]);
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
UnlockReleaseBuffer(buffer);
@@ -363,7 +355,6 @@ spgRedoAddNode(XLogRecPtr lsn, XLogRecord *record)
innerTuple->size);
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
UnlockReleaseBuffer(buffer);
@@ -413,7 +404,6 @@ spgRedoAddNode(XLogRecPtr lsn, XLogRecord *record)
if (xldata->blknoParent != xldata->blknoNew)
{
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
}
MarkBufferDirty(buffer);
}
@@ -464,7 +454,6 @@ spgRedoAddNode(XLogRecPtr lsn, XLogRecord *record)
if (xldata->blknoParent != xldata->blkno)
{
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
}
MarkBufferDirty(buffer);
}
@@ -506,7 +495,6 @@ spgRedoAddNode(XLogRecPtr lsn, XLogRecord *record)
xldata->blknoNew, xldata->offnumNew);
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
UnlockReleaseBuffer(buffer);
@@ -558,7 +546,6 @@ spgRedoSplitTuple(XLogRecPtr lsn, XLogRecord *record)
postfixTuple->size, xldata->offnumPostfix);
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
UnlockReleaseBuffer(buffer);
@@ -588,7 +575,6 @@ spgRedoSplitTuple(XLogRecPtr lsn, XLogRecord *record)
xldata->offnumPostfix);
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
UnlockReleaseBuffer(buffer);
@@ -764,13 +750,11 @@ spgRedoPickSplit(XLogRecPtr lsn, XLogRecord *record)
if (srcPage != NULL)
{
PageSetLSN(srcPage, lsn);
- PageSetTLI(srcPage, ThisTimeLineID);
MarkBufferDirty(srcBuffer);
}
if (destPage != NULL)
{
PageSetLSN(destPage, lsn);
- PageSetTLI(destPage, ThisTimeLineID);
MarkBufferDirty(destBuffer);
}
@@ -807,7 +791,6 @@ spgRedoPickSplit(XLogRecPtr lsn, XLogRecord *record)
}
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
UnlockReleaseBuffer(buffer);
@@ -852,7 +835,6 @@ spgRedoPickSplit(XLogRecPtr lsn, XLogRecord *record)
xldata->blknoInner, xldata->offnumInner);
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
UnlockReleaseBuffer(buffer);
@@ -943,7 +925,6 @@ spgRedoVacuumLeaf(XLogRecPtr lsn, XLogRecord *record)
}
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
UnlockReleaseBuffer(buffer);
@@ -977,7 +958,6 @@ spgRedoVacuumRoot(XLogRecPtr lsn, XLogRecord *record)
PageIndexMultiDelete(page, toDelete, xldata->nDelete);
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
UnlockReleaseBuffer(buffer);
@@ -1060,7 +1040,6 @@ spgRedoVacuumRedirect(XLogRecPtr lsn, XLogRecord *record)
}
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
diff --git a/src/backend/access/transam/README b/src/backend/access/transam/README
index aabcbba49e8..c77f9003441 100644
--- a/src/backend/access/transam/README
+++ b/src/backend/access/transam/README
@@ -439,13 +439,14 @@ critical section.)
happen before the WAL record is inserted; see notes in SyncOneBuffer().)
5. If the relation requires WAL-logging, build a WAL log record and pass it
-to XLogInsert(); then update the page's LSN and TLI using the returned XLOG
+to XLogInsert(); then update the page's LSN using the returned XLOG
location. For instance,
recptr = XLogInsert(rmgr_id, info, rdata);
PageSetLSN(dp, recptr);
- PageSetTLI(dp, ThisTimeLineID);
+ // Note that we no longer do PageSetTLI() from 9.3 onwards
+ // since that field on a page has now changed its meaning.
6. END_CRIT_SECTION()
@@ -489,7 +490,6 @@ standard replay-routine pattern for this case is
... initialize the page ...
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
@@ -523,7 +523,6 @@ The standard replay-routine pattern for this case is
... apply the change ...
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 8e7341ba45c..7f9edef435c 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -3188,7 +3188,6 @@ RestoreBackupBlock(XLogRecPtr lsn, XLogRecord *record, int block_index,
}
PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
if (!keep_buffer)
diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c
index 225edd9f9b7..a360be4daaf 100644
--- a/src/backend/commands/sequence.c
+++ b/src/backend/commands/sequence.c
@@ -393,7 +393,6 @@ fill_seq_with_data(Relation rel, HeapTuple tuple)
recptr = XLogInsert(RM_SEQ_ID, XLOG_SEQ_LOG, rdata);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
@@ -477,7 +476,6 @@ AlterSequence(AlterSeqStmt *stmt)
recptr = XLogInsert(RM_SEQ_ID, XLOG_SEQ_LOG, rdata);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
@@ -741,7 +739,6 @@ nextval_internal(Oid relid)
recptr = XLogInsert(RM_SEQ_ID, XLOG_SEQ_LOG, rdata);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
/* Now update sequence tuple to the intended final state */
@@ -919,7 +916,6 @@ do_setval(Oid relid, int64 next, bool iscalled)
recptr = XLogInsert(RM_SEQ_ID, XLOG_SEQ_LOG, rdata);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
@@ -1598,7 +1594,6 @@ seq_redo(XLogRecPtr lsn, XLogRecord *record)
elog(PANIC, "seq_redo: failed to add item to page");
PageSetLSN(localpage, lsn);
- PageSetTLI(localpage, ThisTimeLineID);
memcpy(page, localpage, BufferGetPageSize(buffer));
MarkBufferDirty(buffer);
diff --git a/src/backend/commands/vacuumlazy.c b/src/backend/commands/vacuumlazy.c
index da678dd8adc..4d3364aeff0 100644
--- a/src/backend/commands/vacuumlazy.c
+++ b/src/backend/commands/vacuumlazy.c
@@ -876,7 +876,6 @@ lazy_scan_heap(Relation onerel, LVRelStats *vacrelstats,
recptr = log_heap_freeze(onerel, buf, FreezeLimit,
MultiXactFrzLimit, frozen, nfrozen);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
}
@@ -1171,7 +1170,6 @@ lazy_vacuum_page(Relation onerel, BlockNumber blkno, Buffer buffer,
unused, uncnt,
vacrelstats->latestRemovedXid);
PageSetLSN(page, recptr);
- PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
diff --git a/src/include/storage/bufpage.h b/src/include/storage/bufpage.h
index 8c887cab735..42f8f2fa496 100644
--- a/src/include/storage/bufpage.h
+++ b/src/include/storage/bufpage.h
@@ -103,7 +103,7 @@ typedef struct
* space management information generic to any page
*
* pd_lsn - identifies xlog record for last change to this page.
- * pd_tli - ditto.
+ * pd_checksum - page checksum, if set.
* pd_flags - flag bits.
* pd_lower - offset to start of free space.
* pd_upper - offset to end of free space.
@@ -114,9 +114,17 @@ typedef struct
* The LSN is used by the buffer manager to enforce the basic rule of WAL:
* "thou shalt write xlog before data". A dirty buffer cannot be dumped
* to disk until xlog has been flushed at least as far as the page's LSN.
- * We also store the 16 least significant bits of the TLI for identification
- * purposes (it is not clear that this is actually necessary, but it seems
- * like a good idea).
+ *
+ * pd_checksum stores the page checksum, if it has been set for this page;
+ * zero is a valid value for a checksum. If a checksum is not in use then
+ * we leave the field unset. This will typically mean the field is zero
+ * though non-zero values may also be present if databases have been
+ * pg_upgraded from releases prior to 9.3, when the same byte offset was
+ * used to store the current timelineid when the page was last updated.
+ * Note that there is no indication on a page as to whether the checksum
+ * is valid or not, a deliberate design choice which avoids the problem
+ * of relying on the page contents to decide whether to verify it. Hence
+ * there are no flag bits relating to checksums.
*
* pd_prune_xid is a hint field that helps determine whether pruning will be
* useful. It is currently unused in index pages.
@@ -138,10 +146,9 @@ typedef struct
typedef struct PageHeaderData
{
/* XXX LSN is member of *any* block, not only page-organized ones */
- PageXLogRecPtr pd_lsn; /* LSN: next byte after last byte of xlog
+ PageXLogRecPtr pd_lsn; /* LSN: next byte after last byte of xlog
* record for last change to this page */
- uint16 pd_tli; /* least significant bits of the TimeLineID
- * containing the LSN */
+ uint16 pd_checksum; /* checksum */
uint16 pd_flags; /* flag bits, see below */
LocationIndex pd_lower; /* offset to start of free space */
LocationIndex pd_upper; /* offset to end of free space */
@@ -335,12 +342,6 @@ typedef PageHeaderData *PageHeader;
#define PageSetLSN(page, lsn) \
PageXLogRecPtrSet(((PageHeader) (page))->pd_lsn, lsn)
-/* NOTE: only the 16 least significant bits are stored */
-#define PageGetTLI(page) \
- (((PageHeader) (page))->pd_tli)
-#define PageSetTLI(page, tli) \
- (((PageHeader) (page))->pd_tli = (uint16) (tli))
-
#define PageHasFreeLinePointers(page) \
(((PageHeader) (page))->pd_flags & PD_HAS_FREE_LINES)
#define PageSetHasFreeLinePointers(page) \