diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2015-06-26 18:13:05 -0300 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2015-06-26 18:13:05 -0300 |
commit | 402822246866e1094d35a617775a65b4be93d322 (patch) | |
tree | 5557c32186a5125131ca8936698a0220cfa45e78 | |
parent | 7c02d48e698ad38bec1399a9dcc543c80b8f5b8f (diff) | |
download | postgresql-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.c | 7 |
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, |