mirror of
https://github.com/postgres/postgres.git
synced 2025-05-28 05:21:27 +03:00
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
This commit is contained in:
parent
7c02d48e69
commit
4028222468
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user