diff options
author | Andres Freund <andres@anarazel.de> | 2019-05-17 18:52:01 -0700 |
---|---|---|
committer | Andres Freund <andres@anarazel.de> | 2019-05-17 18:56:55 -0700 |
commit | 147e3722f7e531f15ba389a4d518efe8cd0bd736 (patch) | |
tree | e48a71b19f0e9412b93ef15b8e40edd65f7a5415 /src/backend/access/heap/heapam_handler.c | |
parent | 7f44ede5941499c4cee13b812dd93335f4005095 (diff) | |
download | postgresql-147e3722f7e531f15ba389a4d518efe8cd0bd736.tar.gz postgresql-147e3722f7e531f15ba389a4d518efe8cd0bd736.zip |
tableam: Avoid relying on relation size to determine validity of tids.
Instead add a tableam callback to do so. To avoid adding per
validation overhead, pass a scan to tuple_tid_valid. In heap's case
we'd otherwise incurred a RelationGetNumberOfBlocks() call for each
tid - which'd have added noticable overhead to nodeTidscan.c.
Author: Andres Freund
Reviewed-By: Ashwin Agrawal
Discussion: https://postgr.es/m/20190515185447.gno2jtqxyktylyvs@alap3.anarazel.de
Diffstat (limited to 'src/backend/access/heap/heapam_handler.c')
-rw-r--r-- | src/backend/access/heap/heapam_handler.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/backend/access/heap/heapam_handler.c b/src/backend/access/heap/heapam_handler.c index 9aa468295ae..35553c7c92d 100644 --- a/src/backend/access/heap/heapam_handler.c +++ b/src/backend/access/heap/heapam_handler.c @@ -205,6 +205,15 @@ heapam_fetch_row_version(Relation relation, } static bool +heapam_tuple_tid_valid(TableScanDesc scan, ItemPointer tid) +{ + HeapScanDesc hscan = (HeapScanDesc) scan; + + return ItemPointerIsValid(tid) && + ItemPointerGetBlockNumber(tid) < hscan->rs_nblocks; +} + +static bool heapam_tuple_satisfies_snapshot(Relation rel, TupleTableSlot *slot, Snapshot snapshot) { @@ -2568,6 +2577,7 @@ static const TableAmRoutine heapam_methods = { .tuple_fetch_row_version = heapam_fetch_row_version, .tuple_get_latest_tid = heap_get_latest_tid, + .tuple_tid_valid = heapam_tuple_tid_valid, .tuple_satisfies_snapshot = heapam_tuple_satisfies_snapshot, .compute_xid_horizon_for_tuples = heap_compute_xid_horizon_for_tuples, |