diff options
| author | Vadim B. Mikheev <vadim4o@yahoo.com> | 1999-04-12 16:56:08 +0000 |
|---|---|---|
| committer | Vadim B. Mikheev <vadim4o@yahoo.com> | 1999-04-12 16:56:08 +0000 |
| commit | 401293fcffa2c6ef8d2b12478aac946072837174 (patch) | |
| tree | 9ddfea604d34cce3b1c8582d3861c249ec0ecbb6 /src/backend/access/nbtree/nbtinsert.c | |
| parent | a2c96a16e453b83cebdfd948e42dd1087d28b41f (diff) | |
| download | postgresql-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.c | 23 |
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 */ { |
