From 401293fcffa2c6ef8d2b12478aac946072837174 Mon Sep 17 00:00:00 2001 From: "Vadim B. Mikheev" Date: Mon, 12 Apr 1999 16:56:08 +0000 Subject: [PATCH] Unique btree-s: /* * Have to check is inserted heap tuple deleted one * (i.e. just moved to another place by vacuum)! */ --- src/backend/access/nbtree/nbtinsert.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c index a0cec5d85a..308aa9e9a6 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.36 1999/03/28 20:31:56 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.37 1999/04/12 16:56:08 vadim Exp $ * *------------------------------------------------------------------------- */ @@ -100,11 +100,12 @@ l1: if (!PageIsEmpty(page) && offset <= maxoff) { TupleDesc itupdesc; - BTItem btitem; + BTItem cbti; HeapTupleData htup; BTPageOpaque opaque; Buffer nbuf; BlockNumber blkno; + bool chtup = true; itupdesc = RelationGetDescr(rel); nbuf = InvalidBuffer; @@ -121,8 +122,22 @@ l1: */ while (_bt_isequal(itupdesc, page, offset, natts, itup_scankey)) { /* they're equal */ - btitem = (BTItem) PageGetItem(page, PageGetItemId(page, offset)); - htup.t_self = btitem->bti_itup.t_tid; + /* + * Have to check is inserted heap tuple deleted one + * (i.e. just moved to another place by vacuum)! + */ + if (chtup) + { + htup.t_self = btitem->bti_itup.t_tid; + heap_fetch(heapRel, SnapshotDirty, &htup, &buffer); + if (htup.t_data == NULL) /* YES! */ + break; + /* Live tuple was inserted */ + ReleaseBuffer(buffer); + chtup = false; + } + cbti = (BTItem) PageGetItem(page, PageGetItemId(page, offset)); + htup.t_self = cbti->bti_itup.t_tid; heap_fetch(heapRel, SnapshotDirty, &htup, &buffer); if (htup.t_data != NULL) /* it is a duplicate */ { -- 2.40.0