aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2015-06-26 18:13:05 -0300
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2015-06-26 18:13:05 -0300
commit402822246866e1094d35a617775a65b4be93d322 (patch)
tree5557c32186a5125131ca8936698a0220cfa45e78
parent7c02d48e698ad38bec1399a9dcc543c80b8f5b8f (diff)
downloadpostgresql-402822246866e1094d35a617775a65b4be93d322.tar.gz
postgresql-402822246866e1094d35a617775a65b4be93d322.zip
Fix BRIN xlog replay
There was a confusion about which block number to use when storing an item's pointer in the revmap -- the revmap page's blkno was being used, not the data page's blkno. Spotted-by: Jeff Janes
-rw-r--r--src/backend/access/brin/brin_xlog.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/backend/access/brin/brin_xlog.c b/src/backend/access/brin/brin_xlog.c
index 49261aa1f16..09001552920 100644
--- a/src/backend/access/brin/brin_xlog.c
+++ b/src/backend/access/brin/brin_xlog.c
@@ -47,6 +47,7 @@ brin_xlog_insert_update(XLogReaderState *record,
{
XLogRecPtr lsn = record->EndRecPtr;
Buffer buffer;
+ BlockNumber regpgno;
Page page;
XLogRedoAction action;
@@ -66,6 +67,9 @@ brin_xlog_insert_update(XLogReaderState *record,
action = XLogReadBufferForRedo(record, 0, &buffer);
}
+ /* need this page's blkno to store in revmap */
+ regpgno = BufferGetBlockNumber(buffer);
+
/* insert the index item into the page */
if (action == BLK_NEEDS_REDO)
{
@@ -97,9 +101,8 @@ brin_xlog_insert_update(XLogReaderState *record,
if (action == BLK_NEEDS_REDO)
{
ItemPointerData tid;
- BlockNumber blkno = BufferGetBlockNumber(buffer);
- ItemPointerSet(&tid, blkno, xlrec->offnum);
+ ItemPointerSet(&tid, regpgno, xlrec->offnum);
page = (Page) BufferGetPage(buffer);
brinSetHeapBlockItemptr(buffer, xlrec->pagesPerRange, xlrec->heapBlk,