pg_am にはインデックスアクセスメソッドの情報が格納されています。 システムにサポートされたそれぞれのインデックスアクセスメソッドに対しひとつの行が存在します。
Table 3-3. pg_am の列
名前 | 型 | 参照先 | 説明 |
---|---|---|---|
amname | name | アクセスメソッドの名前 | |
amowner | int4 | pg_shadow.usesysid | 所有者のユーザ ID (現時点では未使用) |
amstrategies | int2 | このアクセスメソッド用の演算子ストラテジの数 | |
amsupport | int2 | このアクセスメソッド用のサポートルーチンの数 | |
amorderstrategy | int2 | インデックスがソート順を提供しない場合はゼロ、その他の場合はソート順を記述する戦略演算子の戦略番号 | |
amcanunique | bool | AM が一意性インデックスをサポートするかどうか? | |
amcanmulticol | bool | AM が複数列インデックスをサポートするかどうか? | |
amindexnulls | bool | AM がインデックスエントリに NULL を許すかどうか? | |
amconcurrent | bool | AM が同時更新をサポートするかどうか? | |
amgettuple | regproc | pg_proc.oid | "つぎの有効なタプル"関数 |
aminsert | regproc | pg_proc.oid | "このタプルを挿入"関数 |
ambeginscan | regproc | pg_proc.oid | "新規スキャンを開始"関数 |
amrescan | regproc | pg_proc.oid | "このスキャンを再開"関数 |
amendscan | regproc | pg_proc.oid | "このスキャンを終了"関数 |
ammarkpos | regproc | pg_proc.oid | "現在のスキャン位置を記録"関数 |
amrestrpos | regproc | pg_proc.oid | "記録したスキャン位置を復元"関数 |
ambuild | regproc | pg_proc.oid | "新規インデックスをビルド"関数 |
ambulkdelete | regproc | pg_proc.oid | バルク削除関数 |
amcostestimate | regproc | pg_proc.oid | インデックススキャンのコストの推測値 |
複数列をサポートするインデックス AM (amcanmulticolが真)は、1 列目に続く列のヌルのインデックス付けをサポートする必要があります。 これは、プランナが、インデックスを単に 1 列目に使用すれば問い合わせができると判断するためです。 たとえば、(a,b)上のインデックスと WHERE a = 4 という問い合わせについて考えてみましょう。 システムは、a = 4 である行のスキャンにインデックスを使用できると判断しますが、これは、b がヌルである行をインデックスが省略する場合には間違いとなります。 しかし、インデックス付けされた最初の列がヌルである行を省略するのは問題ありません。 (GiST は現在、そのように動作します。) amindexnulls は、インデックス AM が、ヌルの任意の組み合わせを含め、すべての行のインデックスとなるときにのみ真に設定される必要があります。