aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVadim B. Mikheev <vadim4o@yahoo.com>1999-08-09 01:39:19 +0000
committerVadim B. Mikheev <vadim4o@yahoo.com>1999-08-09 01:39:19 +0000
commit1ecb43a40c40d94dc9b627a3ac39c8cfa4ded3ce (patch)
tree1b5f1190758228ff6b2d2b570bff7d5e82affeb7
parent10d6d411a80aaaec55a900e4343ef80aaa13bd7b (diff)
downloadpostgresql-1ecb43a40c40d94dc9b627a3ac39c8cfa4ded3ce.tar.gz
postgresql-1ecb43a40c40d94dc9b627a3ac39c8cfa4ded3ce.zip
Re-use free space on index pages with duplicates.
-rw-r--r--src/backend/access/nbtree/nbtinsert.c29
1 files changed, 9 insertions, 20 deletions
diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c
index 3827e7db29d..94e1d0ccbb1 100644
--- a/src/backend/access/nbtree/nbtinsert.c
+++ b/src/backend/access/nbtree/nbtinsert.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.49 1999/07/19 07:07:19 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.50 1999/08/09 01:39:19 vadim Exp $
*
*-------------------------------------------------------------------------
*/
@@ -392,17 +392,18 @@ _bt_insertonpg(Relation rel,
bool is_root = lpageop->btpo_flags & BTP_ROOT;
/*
- * If we have to split leaf page in the chain of duplicates by new
- * duplicate then we try to look at our right sibling first.
+ * Instead of splitting leaf page in the chain of duplicates
+ * by new duplicate, insert it into some right page.
*/
if ((lpageop->btpo_flags & BTP_CHAIN) &&
(lpageop->btpo_flags & BTP_LEAF) && keys_equal)
{
- bool use_left = true;
-
rbuf = _bt_getbuf(rel, lpageop->btpo_next, BT_WRITE);
rpage = BufferGetPage(rbuf);
rpageop = (BTPageOpaque) PageGetSpecialPointer(rpage);
+ /*
+ * some checks
+ */
if (!P_RIGHTMOST(rpageop)) /* non-rightmost page */
{ /* If we have the same hikey here then
* it's yet another page in chain. */
@@ -418,32 +419,20 @@ _bt_insertonpg(Relation rel,
BTGreaterStrategyNumber))
elog(FATAL, "btree: hikey is out of order");
else if (rpageop->btpo_flags & BTP_CHAIN)
-
/*
* If hikey > scankey then it's last page in chain and
* BTP_CHAIN must be OFF
*/
elog(FATAL, "btree: lost last page in the chain of duplicates");
-
- /* if there is room here then we use this page. */
- if (PageGetFreeSpace(rpage) > itemsz)
- use_left = false;
}
else
/* rightmost page */
{
Assert(!(rpageop->btpo_flags & BTP_CHAIN));
- /* if there is room here then we use this page. */
- if (PageGetFreeSpace(rpage) > itemsz)
- use_left = false;
- }
- if (!use_left) /* insert on the right page */
- {
- _bt_relbuf(rel, buf, BT_WRITE);
- return (_bt_insertonpg(rel, rbuf, stack, keysz,
- scankey, btitem, afteritem));
}
- _bt_relbuf(rel, rbuf, BT_WRITE);
+ _bt_relbuf(rel, buf, BT_WRITE);
+ return (_bt_insertonpg(rel, rbuf, stack, keysz,
+ scankey, btitem, afteritem));
}
/*