43.3. pg_am

pg_am カタログにはインデックスアクセスメソッドの情報が格納されています。システムがサポートするそれぞれのインデックスアクセスメソッドに対し一つの行が存在します。

表 43-3. pg_amの列

名前参照先説明
amnamename アクセスメソッド名
amownerint4pg_shadow.usesysid所有者のユーザ ID(現在未使用)
amstrategiesint2 このアクセスメソッド用の演算子戦略数
amsupportint2 このアクセスメソッド用のサポートルーチンの数
amorderstrategyint2 インデックスがソート順を提供しない場合はゼロ、その他の場合はソート順を記述する戦略演算子の戦略数字
amcanuniquebool アクセスメソッドが一意インデックスをサポートするかどうか?
amcanmulticolbool アクセスメソッドが複数列インデックスをサポートするかどうか?
amindexnullsbool アクセスメソッドがインデックスエントリに NULL を許すかどうか?
amconcurrentbool アクセスメソッドが同時更新をサポートするかどうか?
amgettupleregprocpg_proc.oid"次に有効なタプル"関数
aminsertregprocpg_proc.oid"このタプル挿入"関数
ambeginscanregprocpg_proc.oid"新規スキャン開始"関数
amrescanregprocpg_proc.oid"このスキャン再開始"関数
amendscanregprocpg_proc.oid"このスキャン終了"関数
ammarkposregprocpg_proc.oid"現在のスキャン位置記録"関数
amrestrposregprocpg_proc.oid"記録したスキャン位置復元"関数
ambuildregprocpg_proc.oid"新規インデックスビルド"関数
ambulkdeleteregprocpg_proc.oidバルク削除関数
amvacuumcleanupregprocpg_proc.oidVACUUM 後クリーンアップ関数
amcostestimateregprocpg_proc.oidインデックススキャンのコスト推測関数

複数列をサポートするインデックスメソッド(amcanmulticolが真)は最初の列に続いた列にある NULL 値にインデックスを付けられするようになっている必要があります。と言うのはプランナが最初の列に対する問い合わせにインデックスが使われるものと判断するためです。例えば、(a,b)上のインデックスと WHERE a = 4 という問い合わせについて考えてみましょう。 システムは、a = 4 である行のスキャンにインデックスを使用できると判断しますが、これは、bが NULL である行をインデックスが無視する場合には間違いとなります。しかし、インデックス付けされた最初の列が NULL である行を無視するのは問題ありません。(GiST は現在、そのように動作します。)amindexnulls はインデックスメソッドが NULL の任意の組み合わせを含め、すべての行をインデックス付けするときにのみ真に設定する必要があります。