From: Tom Lane Date: Fri, 21 Feb 2003 18:24:54 +0000 (+0000) Subject: Repair nasty oversight in bt_split: if the index is temporary, we weren't X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=1eb767fb8d0aa1d46a1230b101c70053adf2ae6f;p=users%2Fbernd%2Fpostgres.git 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. --- diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c index ac319ffede..a2c5d4d0f9 100644 --- a/src/backend/access/nbtree/nbtinsert.c +++ b/src/backend/access/nbtree/nbtinsert.c @@ -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;