summaryrefslogtreecommitdiff
path: root/src/backend/access/nbtree/nbtinsert.c
diff options
context:
space:
mode:
authorVadim B. Mikheev <vadim4o@yahoo.com>1999-04-12 16:56:08 +0000
committerVadim B. Mikheev <vadim4o@yahoo.com>1999-04-12 16:56:08 +0000
commit401293fcffa2c6ef8d2b12478aac946072837174 (patch)
tree9ddfea604d34cce3b1c8582d3861c249ec0ecbb6 /src/backend/access/nbtree/nbtinsert.c
parenta2c96a16e453b83cebdfd948e42dd1087d28b41f (diff)
downloadpostgresql-401293fcffa2c6ef8d2b12478aac946072837174.tar.gz
Unique btree-s:
/* * Have to check is inserted heap tuple deleted one * (i.e. just moved to another place by vacuum)! */
Diffstat (limited to 'src/backend/access/nbtree/nbtinsert.c')
-rw-r--r--src/backend/access/nbtree/nbtinsert.c23
1 files 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 */
{