Skip to content

Commit 1ecb43a

Browse files
committed
Re-use free space on index pages with duplicates.
1 parent 10d6d41 commit 1ecb43a

File tree

1 file changed

+9
-20
lines changed

1 file changed

+9
-20
lines changed

src/backend/access/nbtree/nbtinsert.c

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.49 1999/07/19 07:07:19 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.50 1999/08/09 01:39:19 vadim Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -392,17 +392,18 @@ _bt_insertonpg(Relation rel,
392392
bool is_root = lpageop->btpo_flags & BTP_ROOT;
393393

394394
/*
395-
* If we have to split leaf page in the chain of duplicates by new
396-
* duplicate then we try to look at our right sibling first.
395+
* Instead of splitting leaf page in the chain of duplicates
396+
* by new duplicate, insert it into some right page.
397397
*/
398398
if ((lpageop->btpo_flags & BTP_CHAIN) &&
399399
(lpageop->btpo_flags & BTP_LEAF) && keys_equal)
400400
{
401-
bool use_left = true;
402-
403401
rbuf = _bt_getbuf(rel, lpageop->btpo_next, BT_WRITE);
404402
rpage = BufferGetPage(rbuf);
405403
rpageop = (BTPageOpaque) PageGetSpecialPointer(rpage);
404+
/*
405+
* some checks
406+
*/
406407
if (!P_RIGHTMOST(rpageop)) /* non-rightmost page */
407408
{ /* If we have the same hikey here then
408409
* it's yet another page in chain. */
@@ -418,32 +419,20 @@ _bt_insertonpg(Relation rel,
418419
BTGreaterStrategyNumber))
419420
elog(FATAL, "btree: hikey is out of order");
420421
else if (rpageop->btpo_flags & BTP_CHAIN)
421-
422422
/*
423423
* If hikey > scankey then it's last page in chain and
424424
* BTP_CHAIN must be OFF
425425
*/
426426
elog(FATAL, "btree: lost last page in the chain of duplicates");
427-
428-
/* if there is room here then we use this page. */
429-
if (PageGetFreeSpace(rpage) > itemsz)
430-
use_left = false;
431427
}
432428
else
433429
/* rightmost page */
434430
{
435431
Assert(!(rpageop->btpo_flags & BTP_CHAIN));
436-
/* if there is room here then we use this page. */
437-
if (PageGetFreeSpace(rpage) > itemsz)
438-
use_left = false;
439-
}
440-
if (!use_left) /* insert on the right page */
441-
{
442-
_bt_relbuf(rel, buf, BT_WRITE);
443-
return (_bt_insertonpg(rel, rbuf, stack, keysz,
444-
scankey, btitem, afteritem));
445432
}
446-
_bt_relbuf(rel, rbuf, BT_WRITE);
433+
_bt_relbuf(rel, buf, BT_WRITE);
434+
return (_bt_insertonpg(rel, rbuf, stack, keysz,
435+
scankey, btitem, afteritem));
447436
}
448437

449438
/*

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy