mirror of
https://github.com/postgres/postgres.git
synced 2025-06-03 00:02:26 -04: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;
|
XLogRecPtr lsn = record->EndRecPtr;
|
||||||
Buffer buffer;
|
Buffer buffer;
|
||||||
|
BlockNumber regpgno;
|
||||||
Page page;
|
Page page;
|
||||||
XLogRedoAction action;
|
XLogRedoAction action;
|
||||||
|
|
||||||
@ -66,6 +67,9 @@ brin_xlog_insert_update(XLogReaderState *record,
|
|||||||
action = XLogReadBufferForRedo(record, 0, &buffer);
|
action = XLogReadBufferForRedo(record, 0, &buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* need this page's blkno to store in revmap */
|
||||||
|
regpgno = BufferGetBlockNumber(buffer);
|
||||||
|
|
||||||
/* insert the index item into the page */
|
/* insert the index item into the page */
|
||||||
if (action == BLK_NEEDS_REDO)
|
if (action == BLK_NEEDS_REDO)
|
||||||
{
|
{
|
||||||
@ -97,9 +101,8 @@ brin_xlog_insert_update(XLogReaderState *record,
|
|||||||
if (action == BLK_NEEDS_REDO)
|
if (action == BLK_NEEDS_REDO)
|
||||||
{
|
{
|
||||||
ItemPointerData tid;
|
ItemPointerData tid;
|
||||||
BlockNumber blkno = BufferGetBlockNumber(buffer);
|
|
||||||
|
|
||||||
ItemPointerSet(&tid, blkno, xlrec->offnum);
|
ItemPointerSet(&tid, regpgno, xlrec->offnum);
|
||||||
page = (Page) BufferGetPage(buffer);
|
page = (Page) BufferGetPage(buffer);
|
||||||
|
|
||||||
brinSetHeapBlockItemptr(buffer, xlrec->pagesPerRange, xlrec->heapBlk,
|
brinSetHeapBlockItemptr(buffer, xlrec->pagesPerRange, xlrec->heapBlk,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user