一主两备,创建point数据类型,并创建sp_gist索引后插入数据卡住
This commit is contained in:
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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 */
|
||||
|
@ -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);
|
||||
|
Reference in New Issue
Block a user