mirror of
https://github.com/postgres/postgres.git
synced 2025-10-21 02:52:47 +03:00
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
This commit is contained in:
@@ -256,9 +256,10 @@ typedef struct TableAmRoutine
|
||||
* needs be set to true by index_fetch_tuple, signalling to the caller
|
||||
* that index_fetch_tuple should be called again for the same tid.
|
||||
*
|
||||
* *all_dead should be set to true by index_fetch_tuple iff it is
|
||||
* guaranteed that no backend needs to see that tuple. Index AMs can use
|
||||
* that do avoid returning that tid in future searches.
|
||||
* *all_dead, if all_dead is not NULL, should be set to true if by
|
||||
* index_fetch_tuple iff it is guaranteed that no backend needs to see
|
||||
* that tuple. Index AMs can use that do avoid returning that tid in
|
||||
* future searches.
|
||||
*/
|
||||
bool (*index_fetch_tuple) (struct IndexFetchTableData *scan,
|
||||
ItemPointer tid,
|
||||
@@ -594,9 +595,10 @@ table_index_fetch_end(struct IndexFetchTableData *scan)
|
||||
* will be set to true, signalling that table_index_fetch_tuple() should be called
|
||||
* again for the same tid.
|
||||
*
|
||||
* *all_dead will be set to true by table_index_fetch_tuple() iff it is guaranteed
|
||||
* that no backend needs to see that tuple. Index AMs can use that do avoid
|
||||
* returning that tid in future searches.
|
||||
* *all_dead, if all_dead is not NULL, will be set to true by
|
||||
* table_index_fetch_tuple() iff it is guaranteed that no backend needs to see
|
||||
* that tuple. Index AMs can use that do avoid returning that tid in future
|
||||
* searches.
|
||||
*
|
||||
* The difference between this function and table_fetch_row_version is that
|
||||
* this function returns the currently visible version of a row if the AM
|
||||
@@ -618,6 +620,17 @@ table_index_fetch_tuple(struct IndexFetchTableData *scan,
|
||||
all_dead);
|
||||
}
|
||||
|
||||
/*
|
||||
* This is a convenience wrapper around table_index_fetch_tuple() which
|
||||
* returns whether there are table tuple items corresponding to an index
|
||||
* entry. This likely is only useful to verify if there's a conflict in a
|
||||
* unique index.
|
||||
*/
|
||||
extern bool table_index_fetch_tuple_check(Relation rel,
|
||||
ItemPointer tid,
|
||||
Snapshot snapshot,
|
||||
bool *all_dead);
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------
|
||||
* Functions for non-modifying operations on individual tuples
|
||||
|
Reference in New Issue
Block a user