pg_am テーブルには各インデックスアクセスメソッド用の行が一つずつ含まれています。PostgreSQL にはヒープアクセスメソッドが組み込まれていますが、他のすべてのアクセスメソッドはこのpg_amで記述されています。そのスキーマをTable 17-1 に示します。
Table 17-1. インデックスアクセスメソッドのスキーマ
| 列 | 説明 |
|---|---|
| amname | アクセスメソッドの名前 |
| amowner | 所有者のユーザ ID (現時点では未使用) |
| amstrategies | このアクセスメソッド用のストラテジの数(後述) |
| amsupport | このアクセスメソッド用のサポートルーチンの数(後述) |
| amorderstrategy | インデックスがソート順を提供しない場合はゼロ、その他の場合はソート順を説明するストラテジ演算子のストラテジ数 |
| amcanunique | AM が一意性インデックスをサポートするかどうか? |
| amcanmulticol | AM が複数列インデックスをサポートするかどうか? |
| amindexnulls | AM がインデックスエントリに NULL を許すかどうか? |
| amconcurrent | AM が同時更新をサポートするかどうか? |
| amgettuple | |
| aminsert | |
| ... | アクセスメソッドへのインタフェースルーチン 用のプロシージャ識別子。たとえば regproc ID は、ここで紹介するアクセスメソッドをオープン/クローズしたり、そこからインスタンスを取得したりするためのものです。 |
pg_amの中の行のオブジェクト ID は他の沢山のテーブルの中で外部キーとして使われています。このテーブルには新しい行を追加する必要はありません。唯一重要なのは拡張したいアクセスメソッドのオブジェクト ID です。
SELECT oid FROM pg_am WHERE amname = 'btree'; oid ----- 403 (1 row)
後の WHERE 節内にてこの問い合わせを使います。