1
0
mirror of https://github.com/postgres/postgres.git synced 2025-09-09 13:09:39 +03:00

Repair nasty oversight in bt_split: if the index is temporary, we weren't

updating the left-link from the split page's right sibling.  This could
result in backwards index scans missing some entries.
Same bug exists in HEAD, will be patched later.
This commit is contained in:
Tom Lane
2003-02-21 18:24:54 +00:00
parent 2bba78d605
commit a78e12f96a

View File

@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.96 2002/09/04 20:31:09 momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.96.2.1 2003/02/21 18:24:54 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -699,6 +699,7 @@ _bt_split(Relation rel, Buffer buf, OffsetNumber firstright,
oopaque;
Buffer sbuf = 0;
Page spage = 0;
BTPageOpaque sopaque = 0;
Size itemsz;
ItemId itemid;
BTItem item;
@@ -862,6 +863,7 @@ _bt_split(Relation rel, Buffer buf, OffsetNumber firstright,
{
sbuf = _bt_getbuf(rel, ropaque->btpo_next, BT_WRITE);
spage = BufferGetPage(sbuf);
sopaque = (BTPageOpaque) PageGetSpecialPointer(spage);
}
/*
@@ -872,6 +874,9 @@ _bt_split(Relation rel, Buffer buf, OffsetNumber firstright,
*/
START_CRIT_SECTION();
if (!P_RIGHTMOST(ropaque))
sopaque->btpo_prev = BufferGetBlockNumber(rbuf);
/* XLOG stuff */
if (!rel->rd_istemp)
{
@@ -922,10 +927,6 @@ _bt_split(Relation rel, Buffer buf, OffsetNumber firstright,
if (!P_RIGHTMOST(ropaque))
{
BTPageOpaque sopaque = (BTPageOpaque) PageGetSpecialPointer(spage);
sopaque->btpo_prev = BufferGetBlockNumber(rbuf);
rdata[2].next = &(rdata[3]);
rdata[3].buffer = sbuf;
rdata[3].data = NULL;