## 49.3. `pg_am`

The catalog `pg_am` stores information about index access methods. There is one row for each index access method supported by the system. The contents of this catalog are discussed in detail in Chapter 58.

Table 49.3. `pg_am` Columns

Name | Type | References | Description
--- | --- | --- | ---
`oid` | `oid` |  | Row identifier (hidden attribute; must be explicitly selected)
`amname` | `name` |  | Name of the access method
`amstrategies` | `int2` |  | Number of operator strategies for this access method, or zero if access method does not have a fixed set of operator strategies
`amsupport` | `int2` |  | Number of support routines for this access method
`amcanorder` | `bool` |  | Does the access method support ordered scans sorted by the indexed column's value?
`amcanorderbyop` | `bool` |  | Does the access method support ordered scans sorted by the result of an operator on the indexed column?
`amcanbackward` | `bool` |  | Does the access method support backward scanning?
`amcanunique` | `bool` |  | Does the access method support unique indexes?
`amcanmulticol` | `bool` |  | Does the access method support multicolumn indexes?
`amoptionalkey` | `bool` |  | Does the access method support a scan without any constraint for the first index column?
`amsearcharray` | `bool` |  | Does the access method support `ScalarArrayOpExpr` searches?
`amsearchnulls` | `bool` |  | Does the access method support `IS NULL`/`NOT NULL` searches?
`amstorage` | `bool` |  | Can index storage data type differ from column data type?
`amclusterable` | `bool` |  | Can an index of this type be clustered on?
`ampredlocks` | `bool` |  | Does an index of this type manage fine-grained predicate locks?
`amcaninclude` | `bool` |  | Does the access method support included columns?
`amkeytype` | `oid` | ``pg_type`.oid` | Type of data stored in index, or zero if not a fixed type
`aminsert` | `regproc` | ``pg_proc`.oid` | “Insert this tuple” function
`ambeginscan` | `regproc` | ``pg_proc`.oid` | “Prepare for index scan” function
`amgettuple` | `regproc` | ``pg_proc`.oid` | “Next valid tuple” function, or zero if none
`amgetbitmap` | `regproc` | ``pg_proc`.oid` | “Fetch all valid tuples” function, or zero if none
`amrescan` | `regproc` | ``pg_proc`.oid` | “(Re)start index scan” function
`amendscan` | `regproc` | ``pg_proc`.oid` | “Clean up after index scan” function
`ammarkpos` | `regproc` | ``pg_proc`.oid` | “Mark current scan position” function
`amrestrpos` | `regproc` | ``pg_proc`.oid` | “Restore marked scan position” function
`ambuild` | `regproc` | ``pg_proc`.oid` | “Build new index” function
`ambuildempty` | `regproc` | ``pg_proc`.oid` | “Build empty index” function
`ambulkdelete` | `regproc` | ``pg_proc`.oid` | Bulk-delete function
`amvacuumcleanup` | `regproc` | ``pg_proc`.oid` | Post-`VACUUM` cleanup function
`amcanreturn` | `regproc` | ``pg_proc`.oid` | Function to check whether an index column supports index-only scans. Can be zero if index-only scans are never supported.
`amcostestimate` | `regproc` | ``pg_proc`.oid` | Function to estimate cost of an index scan
`amoptions` | `regproc` | ``pg_proc`.oid` | Function to parse and validate `reloptions` for an index