Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit668e37d

Browse files
committed
Fix wrong WAL info value generated when gistContinueInsert() performs an
index page split. This would result in index corruption, or even more likelyan error during WAL replay, if we were unlucky enough to crash duringend-of-recovery cleanup after having completed an incomplete GIST insertion.Yoichi Hirai
1 parent98e8a41 commit668e37d

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

‎src/backend/access/gist/gistxlog.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/access/gist/gistxlog.c,v 1.33 2009/12/19 01:32:32 sriggs Exp $
11+
* $PostgreSQL: pgsql/src/backend/access/gist/gistxlog.c,v 1.34 2009/12/24 17:52:04 tgl Exp $
1212
*-------------------------------------------------------------------------
1313
*/
1414
#include"postgres.h"
@@ -650,6 +650,7 @@ gistContinueInsert(gistIncompleteInsert *insert)
650650
intj,
651651
k,
652652
pituplen=0;
653+
uint8xlinfo;
653654
XLogRecData*rdata;
654655
XLogRecPtrrecptr;
655656
Buffertempbuffer=InvalidBuffer;
@@ -738,6 +739,7 @@ gistContinueInsert(gistIncompleteInsert *insert)
738739
for (j=0;j<ntodelete;j++)
739740
PageIndexTupleDelete(pages[0],todelete[j]);
740741

742+
xlinfo=XLOG_GIST_PAGE_SPLIT;
741743
rdata=formSplitRdata(index->rd_node,insert->path[i],
742744
false,&(insert->key),
743745
gistMakePageLayout(buffers,numbuffer));
@@ -751,6 +753,7 @@ gistContinueInsert(gistIncompleteInsert *insert)
751753
PageIndexTupleDelete(pages[0],todelete[j]);
752754
gistfillbuffer(pages[0],itup,lenitup,InvalidOffsetNumber);
753755

756+
xlinfo=XLOG_GIST_PAGE_UPDATE;
754757
rdata=formUpdateRdata(index->rd_node,buffers[0],
755758
todelete,ntodelete,
756759
itup,lenitup,&(insert->key));
@@ -767,7 +770,7 @@ gistContinueInsert(gistIncompleteInsert *insert)
767770
GistPageGetOpaque(pages[j])->rightlink=InvalidBlockNumber;
768771
MarkBufferDirty(buffers[j]);
769772
}
770-
recptr=XLogInsert(RM_GIST_ID,XLOG_GIST_PAGE_UPDATE,rdata);
773+
recptr=XLogInsert(RM_GIST_ID,xlinfo,rdata);
771774
for (j=0;j<numbuffer;j++)
772775
{
773776
PageSetLSN(pages[j],recptr);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp