From a78e12f96aad5e89a44d9725c95bda0866a228f3 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 21 Feb 2003 18:24:54 +0000 Subject: [PATCH] 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. --- src/backend/access/nbtree/nbtinsert.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c index 99011a5c958..ad52b0d3fad 100644 --- a/src/backend/access/nbtree/nbtinsert.c +++ b/src/backend/access/nbtree/nbtinsert.c @@ -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; -- 2.39.5