The pg_am table contains one row for every index access method. Support for the heap access method is built into PostgreSQL, but all other access methods are described in pg_am. The schema is shown in Table 17-1.
Table 17-1. Index Access Method Schema
| Column | Description |
|---|---|
| amname | name of the access method |
| amowner | user ID of the owner (currently not used) |
| amstrategies | number of strategies for this access method (see below) |
| amsupport | number of support routines for this access method (see below) |
| amorderstrategy | zero if the index offers no sort order, otherwise the strategy number of the strategy operator that describes the sort order |
| amcanunique | does AM support unique indexes? |
| amcanmulticol | does AM support multicolumn indexes? |
| amindexnulls | does AM support NULL index entries? |
| amconcurrent | does AM support concurrent updates? |
| amgettuple | |
| aminsert | |
| ... | procedure identifiers for interface routines to the access method. For example, regproc IDs for opening, closing, and getting rows from the access method appear here. |
The object ID of the row in pg_am is used as a foreign key in a lot of other tables. You do not need to add a new row to this table; all that you are interested in is the object ID of the access method you want to extend:
SELECT oid FROM pg_am WHERE amname = 'btree'; oid ----- 403 (1 row)
We will use that query in a WHERE clause later.