mirror of
https://github.com/pgvector/pgvector.git
synced 2026-07-10 06:40:57 +08:00
Commit pages with tuple
This commit is contained in:
@@ -60,6 +60,7 @@ static void
|
|||||||
InsertTuple(Relation rel, IndexTuple itup, Relation heapRel, Datum *values)
|
InsertTuple(Relation rel, IndexTuple itup, Relation heapRel, Datum *values)
|
||||||
{
|
{
|
||||||
Buffer buf;
|
Buffer buf;
|
||||||
|
Buffer prevbuf = InvalidBuffer;
|
||||||
Page page;
|
Page page;
|
||||||
GenericXLogState *state;
|
GenericXLogState *state;
|
||||||
Size itemsz;
|
Size itemsz;
|
||||||
@@ -105,20 +106,18 @@ InsertTuple(Relation rel, IndexTuple itup, Relation heapRel, Datum *values)
|
|||||||
|
|
||||||
/* Update previous buffer */
|
/* Update previous buffer */
|
||||||
IvfflatPageGetOpaque(page)->nextblkno = insertPage;
|
IvfflatPageGetOpaque(page)->nextblkno = insertPage;
|
||||||
|
MarkBufferDirty(buf);
|
||||||
|
|
||||||
/* Init page */
|
/* Init page */
|
||||||
PageInit(newpage, BufferGetPageSize(newbuf), sizeof(IvfflatPageOpaqueData));
|
PageInit(newpage, BufferGetPageSize(newbuf), sizeof(IvfflatPageOpaqueData));
|
||||||
IvfflatPageGetOpaque(newpage)->nextblkno = InvalidBlockNumber;
|
IvfflatPageGetOpaque(newpage)->nextblkno = InvalidBlockNumber;
|
||||||
IvfflatPageGetOpaque(newpage)->page_id = IVFFLAT_PAGE_ID;
|
IvfflatPageGetOpaque(newpage)->page_id = IVFFLAT_PAGE_ID;
|
||||||
|
|
||||||
/* Commit */
|
prevbuf = buf;
|
||||||
MarkBufferDirty(buf);
|
buf = newbuf;
|
||||||
MarkBufferDirty(newbuf);
|
page = newpage;
|
||||||
GenericXLogFinish(state);
|
|
||||||
|
|
||||||
/* Unlock */
|
break;
|
||||||
UnlockReleaseBuffer(buf);
|
|
||||||
UnlockReleaseBuffer(newbuf);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,6 +127,9 @@ InsertTuple(Relation rel, IndexTuple itup, Relation heapRel, Datum *values)
|
|||||||
|
|
||||||
IvfflatCommitBuffer(buf, state);
|
IvfflatCommitBuffer(buf, state);
|
||||||
|
|
||||||
|
if (BufferIsValid(prevbuf))
|
||||||
|
UnlockReleaseBuffer(prevbuf);
|
||||||
|
|
||||||
/* Update the insert page */
|
/* Update the insert page */
|
||||||
if (insertPage != originalInsertPage)
|
if (insertPage != originalInsertPage)
|
||||||
IvfflatUpdateList(rel, state, listInfo, insertPage, originalInsertPage, InvalidBlockNumber, MAIN_FORKNUM);
|
IvfflatUpdateList(rel, state, listInfo, insertPage, originalInsertPage, InvalidBlockNumber, MAIN_FORKNUM);
|
||||||
|
|||||||
Reference in New Issue
Block a user