diff options
author | Andres Freund <andres@anarazel.de> | 2019-03-25 16:52:55 -0700 |
---|---|---|
committer | Andres Freund <andres@anarazel.de> | 2019-03-25 16:52:55 -0700 |
commit | 71bdc99d0d7c3b2d73fa04fb2ff80870ce1305f7 (patch) | |
tree | 543735343b99a2d3ebd2752130f26747d9f14eb3 /src/backend/access/nbtree/nbtinsert.c | |
parent | aa1419e63f85b23503076bb4b6413aca30b535fe (diff) | |
download | postgresql-71bdc99d0d7c3b2d73fa04fb2ff80870ce1305f7.tar.gz postgresql-71bdc99d0d7c3b2d73fa04fb2ff80870ce1305f7.zip |
tableam: Add helper for indexes to check if a corresponding table tuples exist.
This is, likely exclusively, useful to verify that conflicts detected
in a unique index are with live tuples, rather than dead ones.
Author: Andres Freund
Discussion: https://postgr.es/m/20180703070645.wchpu5muyto5n647@alap3.anarazel.de
Diffstat (limited to 'src/backend/access/nbtree/nbtinsert.c')
-rw-r--r-- | src/backend/access/nbtree/nbtinsert.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c index 2c98405aac8..96b7593fc1c 100644 --- a/src/backend/access/nbtree/nbtinsert.c +++ b/src/backend/access/nbtree/nbtinsert.c @@ -15,9 +15,9 @@ #include "postgres.h" -#include "access/heapam.h" #include "access/nbtree.h" #include "access/nbtxlog.h" +#include "access/tableam.h" #include "access/transam.h" #include "access/xloginsert.h" #include "miscadmin.h" @@ -431,12 +431,14 @@ _bt_check_unique(Relation rel, BTInsertState insertstate, Relation heapRel, } /* - * We check the whole HOT-chain to see if there is any tuple - * that satisfies SnapshotDirty. This is necessary because we - * have just a single index entry for the entire chain. + * Check if there's any table tuples for this index entry + * satisfying SnapshotDirty. This is necessary because for AMs + * with optimizations like heap's HOT, we have just a single + * index entry for the entire chain. */ - else if (heap_hot_search(&htid, heapRel, &SnapshotDirty, - &all_dead)) + else if (table_index_fetch_tuple_check(heapRel, &htid, + &SnapshotDirty, + &all_dead)) { TransactionId xwait; @@ -489,7 +491,8 @@ _bt_check_unique(Relation rel, BTInsertState insertstate, Relation heapRel, * entry. */ htid = itup->t_tid; - if (heap_hot_search(&htid, heapRel, SnapshotSelf, NULL)) + if (table_index_fetch_tuple_check(heapRel, &htid, + SnapshotSelf, NULL)) { /* Normal case --- it's still live */ } |