一主两备,创建point数据类型,并创建sp_gist索引后插入数据卡住

This commit is contained in:
lexin184383
2024-04-11 10:26:37 +08:00
committed by yaoxin
parent 5f1acca434
commit 1a7a3e741a
3 changed files with 13 additions and 12 deletions

View File

@ -375,20 +375,21 @@ void spgRedoSplitTupleOperatorSrcPage(RedoBufferInfo *buffer, void *recorddata,
/* restore leaf tuples to src and/or dest page */
void spgRedoPickSplitRestoreLeafTuples(RedoBufferInfo *buffer, void *recorddata, bool destflag, void *pageselect,
void *insertdata)
void *insertdata, void *tuple)
{
char *ptr = (char *)recorddata;
spgxlogPickSplit *xldata = (spgxlogPickSplit *)ptr;
Page page = buffer->pageinfo.page;
uint8 *leafPageSelect = (uint8 *)pageselect;
OffsetNumber *toInsert = (OffsetNumber *)insertdata;
char *ptrlt = (char *)tuple;
int i;
/* restore leaf tuples to src and/or dest page */
for (i = 0; i < xldata->nInsert; i++) {
SpGistLeafTuple lt = (SpGistLeafTuple)ptr;
SpGistLeafTuple lt = (SpGistLeafTuple)ptrlt;
ptr += lt->size;
ptrlt += lt->size;
if ((destflag && leafPageSelect[i]) || ((!destflag) && (!leafPageSelect[i]))) {
addOrReplaceTuple(page, (Item)lt, lt->size, toInsert[i]);
@ -397,7 +398,7 @@ void spgRedoPickSplitRestoreLeafTuples(RedoBufferInfo *buffer, void *recorddata,
}
void spgRedoPickSplitOperatorSrcPage(RedoBufferInfo *srcBuffer, void *recorddata, void *deleteoffset,
BlockNumber blknoInner, void *pageselect, void *insertdata)
BlockNumber blknoInner, void *pageselect, void *insertdata, void *tuple)
{
char *ptr = (char *)recorddata;
spgxlogPickSplit *xldata = (spgxlogPickSplit *)ptr;
@ -423,14 +424,14 @@ void spgRedoPickSplitOperatorSrcPage(RedoBufferInfo *srcBuffer, void *recorddata
InvalidBlockNumber, InvalidOffsetNumber);
}
spgRedoPickSplitRestoreLeafTuples(srcBuffer, recorddata, false, pageselect, insertdata);
spgRedoPickSplitRestoreLeafTuples(srcBuffer, recorddata, false, pageselect, insertdata, tuple);
/* don't update LSN etc till we're done with it */
/* modify for batchlsn, don't markdirty */
PageSetLSN(srcPage, srcBuffer->lsn);
}
void spgRedoPickSplitOperatorDestPage(RedoBufferInfo *destBuffer, void *recorddata, void *pageselect, void *insertdata)
void spgRedoPickSplitOperatorDestPage(RedoBufferInfo *destBuffer, void *recorddata, void *pageselect, void *insertdata, void *tuple)
{
char *ptr = (char *)recorddata;
spgxlogPickSplit *xldata = (spgxlogPickSplit *)ptr;
@ -441,7 +442,7 @@ void spgRedoPickSplitOperatorDestPage(RedoBufferInfo *destBuffer, void *recordda
SpGistInitPage(destPage, SPGIST_LEAF | (xldata->storesNulls ? SPGIST_NULLS : 0));
}
spgRedoPickSplitRestoreLeafTuples(destBuffer, recorddata, true, pageselect, insertdata);
spgRedoPickSplitRestoreLeafTuples(destBuffer, recorddata, true, pageselect, insertdata, tuple);
PageSetLSN(destPage, destBuffer->lsn);
}

View File

@ -392,7 +392,7 @@ static void spgRedoPickSplit(XLogReaderState *record)
if (redoaction == BLK_NEEDS_REDO) {
spgRedoPickSplitOperatorSrcPage(&srcBuffer, (void *)xldata, (void *)toDelete, blknoInner,
(void *)leafPageSelect, (void *)toInsert);
(void *)leafPageSelect, (void *)toInsert, (void *)ptr);
}
}
@ -411,7 +411,7 @@ static void spgRedoPickSplit(XLogReaderState *record)
}
if (redoaction == BLK_NEEDS_REDO) {
spgRedoPickSplitOperatorDestPage(&destBuffer, (void *)xldata, (void *)leafPageSelect, (void *)toInsert);
spgRedoPickSplitOperatorDestPage(&destBuffer, (void *)xldata, (void *)leafPageSelect, (void *)toInsert, (void *)ptr);
}
/* don't update LSN etc till we're done with it */

View File

@ -1242,11 +1242,11 @@ extern void spgRedoAddNodeOperatorParentPage(RedoBufferInfo* buffer, void* recor
extern void spgRedoSplitTupleOperatorDestPage(RedoBufferInfo* buffer, void* recorddata, void* tuple);
extern void spgRedoSplitTupleOperatorSrcPage(RedoBufferInfo* buffer, void* recorddata, void* pretuple, void* posttuple);
extern void spgRedoPickSplitRestoreLeafTuples(
RedoBufferInfo* buffer, void* recorddata, bool destflag, void* pageselect, void* insertdata);
RedoBufferInfo* buffer, void* recorddata, bool destflag, void* pageselect, void* insertdata, void* tuple);
extern void spgRedoPickSplitOperatorSrcPage(RedoBufferInfo* srcBuffer, void* recorddata, void* deleteoffset,
BlockNumber blknoInner, void* pageselect, void* insertdata);
BlockNumber blknoInner, void* pageselect, void* insertdata, void* tuple);
extern void spgRedoPickSplitOperatorDestPage(
RedoBufferInfo* destBuffer, void* recorddata, void* pageselect, void* insertdata);
RedoBufferInfo* destBuffer, void* recorddata, void* pageselect, void* insertdata, void* tuple);
extern void spgRedoPickSplitOperatorInnerPage(
RedoBufferInfo* innerBuffer, void* recorddata, void* tuple, void* tupleheader, BlockNumber blknoInner);
extern void spgRedoPickSplitOperatorParentPage(RedoBufferInfo* parentBuffer, void* recorddata, BlockNumber blknoInner);