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/utils/adt/tid.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/utils/adt/tid.c')
-rw-r--r-- | src/backend/utils/adt/tid.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/backend/utils/adt/tid.c b/src/backend/utils/adt/tid.c index 6ab26d8ea8b..1aab30b6aab 100644 --- a/src/backend/utils/adt/tid.c +++ b/src/backend/utils/adt/tid.c @@ -358,6 +358,7 @@ currtid_byreloid(PG_FUNCTION_ARGS) Relation rel; AclResult aclresult; Snapshot snapshot; + TableScanDesc scan; result = (ItemPointer) palloc(sizeof(ItemPointerData)); if (!reloid) @@ -380,7 +381,9 @@ currtid_byreloid(PG_FUNCTION_ARGS) ItemPointerCopy(tid, result); snapshot = RegisterSnapshot(GetLatestSnapshot()); - table_get_latest_tid(rel, snapshot, result); + scan = table_beginscan(rel, snapshot, 0, NULL); + table_get_latest_tid(scan, result); + table_endscan(scan); UnregisterSnapshot(snapshot); table_close(rel, AccessShareLock); @@ -398,6 +401,7 @@ currtid_byrelname(PG_FUNCTION_ARGS) Relation rel; AclResult aclresult; Snapshot snapshot; + TableScanDesc scan; relrv = makeRangeVarFromNameList(textToQualifiedNameList(relname)); rel = table_openrv(relrv, AccessShareLock); @@ -415,7 +419,9 @@ currtid_byrelname(PG_FUNCTION_ARGS) ItemPointerCopy(tid, result); snapshot = RegisterSnapshot(GetLatestSnapshot()); - table_get_latest_tid(rel, snapshot, result); + scan = table_beginscan(rel, snapshot, 0, NULL); + table_get_latest_tid(scan, result); + table_endscan(scan); UnregisterSnapshot(snapshot); table_close(rel, AccessShareLock); |