implications. The requirements of amcanunique
are discussed in .
The amcanmulticol flag asserts that the
- access method supports multicolumn indexes, while
+ access method supports multi-key- column indexes, while
amoptionalkey asserts that it allows scans
where no indexable restriction clause is given for the first index column.
When amcanmulticol is false,
conditions.
+ The amcaninclude flag indicates whether the
+ access method supports included
columns, that is it can
+ store (without processing) additional columns beyond the key column(s).
+ The requirements of the preceding paragraph apply only to the key
+ columns. In particular, the combination
+ of amcanmulticol =false
+ and amcaninclude =true is
+ sensible: it means that there can only be one key column, but there can
+ also be included column(s). Also, included columns must be allowed to be
+ null, independently of amoptionalkey .
+
+
Check whether the index can support
linkend="indexes-index-only-scans">index-only scans on
- the given column, by returning the indexed column values for an index entry
- in the form of an IndexTuple . The attribute number
- is 1-based, i.e., the first column's attno is 1. Returns true if supported,
- else false. If the access method does not support index-only scans at all,
+ the given column, by returning the column's original indexed value.
+ The attribute number is 1-based, i.e., the first column's attno is 1.
+ Returns true if supported, else false.
+ This function should always return true for included columns
+ (if those are supported), since there's little point in an included
+ column that can't be retrieved.
+ If the access method does not support index-only scans at all,
the amcanreturn field in its IndexAmRoutine
struct can be set to NULL.
core code does not know how to do that and will return NULL. It may
also be advantageous to implement AMPROP_RETURNABLE testing,
if that can be done more cheaply than by opening the index and calling
- <structfield>amcanreturn>, which is the core code's default behavior.
+ <function>amcanreturn>, which is the core code's default behavior.
The default behavior should be satisfactory for all other standard
properties.
If the index supports index-only
- scans (i.e., amcanreturn returns true for it),
+ scans (i.e., amcanreturn returns true for any
+ of its columns),
then on success the AM must also check scan->xs_want_itup ,
and if that is true it must return the originally indexed data for the
- index entry. The data can be returned in the form of an
+ index entry. Columns for which amcanreturn returns
+ false can be returned as nulls.
+ The data can be returned in the form of an
IndexTuple pointer stored at scan->xs_itup ,
with tuple descriptor scan->xs_itupdesc ; or in the form of
a HeapTuple pointer stored at scan->xs_hitup ,
stmt->indexIncludingParams);
numberOfAttributes = list_length(allIndexParams);
- if (numberOfAttributes <= 0)
+ if (numberOfKey Attributes <= 0)
ereport(ERROR,
(errcode(ERRCODE_INVALID_OBJECT_DEFINITION),
errmsg("must specify at least one column")));
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("access method \"%s\" does not support included columns",
accessMethodName)));
- if (numberOfAttributes > 1 && !amRoutine->amcanmulticol)
+ if (numberOfKey Attributes > 1 && !amRoutine->amcanmulticol)
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("access method \"%s\" does not support multicolumn indexes",