53.26. pg_index #

pg_indexカタログはインデックス情報の一部を保持します。 その他のほとんどの情報はpg_classにあります。

表53.26 pg_indexの列

列 型

説明

indexrelid oid (参照先 pg_class.oid

このインデックスに対するpg_class項目のOID

indrelid oid (参照先 pg_class.oid

このインデックスが使われるテーブルに対するpg_class項目のOID

indnatts int2

インデックス内の列数(pg_class.relnattsの複製)

indnkeyatts int2

格納されているだけで、インデックスのセマンティクスに寄与していないincluded columnsを含まないインデックス内のkey columnsの数。

indisunique bool

trueの場合、一意性インデックス

indnullsnotdistinct bool

この値はユニークインデックスに対してのみ使用されます。 falseの場合は、このユニークインデックスはNULL値を区別するものとみなします(PostgreSQLのデフォルト動作では、インデックスはカラムに複数のNULL値を含むことができます)。 NULL値は等しいものとみなします場合はtrue(インデックスはカラムに1つのNULL値しか含むことができません)。

indisprimary bool

trueの場合、このインデックスはテーブルの主キーを表します (この値がtrueの場合、indisuniqueは常にtrueでなければなりません)

indisexclusion bool

trueの場合、このインデックスは排他制約をサポートします

indimmediate bool

trueの場合、一意性検査が挿入時即座に強制されます (indisuniqueがtrueでなければ無関係です)

indisclustered bool

trueの場合、前回このインデックスを元にテーブルはクラスタ化されました

indisvalid bool

trueの場合、現在このインデックスは問い合わせに対して有効です。 falseの場合は、インデックスが不完全かもしれないことを意味します。 INSERT/UPDATE操作による変更が行われているはずで、問い合わせに使用するには安全ではありません。 一意性インデックスであれば、一意性も保証されません。

indcheckxmin bool

trueの場合、pg_index行のxminTransactionXminイベント境界値を下回るまで、問い合わせはインデックスを使用してはいけません。 なぜなら、テーブルは互換性の無い行と共に破壊されたHOTチェインを含み、それらが可視であるかもしれないからです。

indisready bool

trueの場合、インデックスは挿入に対する準備ができています。 falseの場合、インデックスはINSERT/UPDATE操作により無視されなければならないことを意味します。

indislive bool

falseの場合は、インデックスの削除処理が進行中であり、このためすべての目的において(HOT安全性の決定を含む)無視しなければなりません

indisreplident bool

trueの場合、このインデックスはALTER TABLE ... REPLICA IDENTITY USING INDEX ...を用いてreplica identityが選択されます

indkey int2vector (参照先 pg_attribute.attnum

このインデックスがどのテーブル列をインデックスとしているかを示すindnatts配列の値です。 例えば、1 3は1番目と3番目のテーブル列がインデックス項目となっていることを示します。 キー列は、(INCLUDE句で指定した)非キー列の前に来ます。 この配列でゼロとなっているのは対応するインデックスの属性が単純な列参照ではなくテーブル列に渡った演算式であることを示します。

indcollation oidvector (参照先 pg_collation.oid

インデックスキー(indnkeyattsの値)内の各列に関してここにはインデックスで使用される照合順序のOIDが含まれます。 照合できないデータ型の列ではゼロが入ります。

indclass oidvector (参照先 pg_opclass.oid

インデックスキー(indnkeyattsの値)内のそれぞれの列に対して、使用する演算子クラスのOIDを保持します。 pg_opclassを参照してください。

indoption int2vector

列毎のフラグビットを格納するindnkeyatts値の配列です。 ビットの意味はインデックスのアクセスメソッドによって定義されています。

indexprs pg_node_tree

単純な列参照でないインデックス属性の(nodeToString()表現による)演算式ツリー。 indkeyがゼロの各エントリについて1つの要素があるリストになっています。 すべてのインデックス属性が単純な参照ならNULLとなります。

indpred pg_node_tree

部分インデックス属性の(nodeToString()表現による)演算式ツリー。 部分インデックスでなければNULL。