第 49章インデックスアクセスメソッドのインタフェース定義

目次
49.1. インデックス用のカタログ項目
49.2. インデックスアクセスメソッド関数
49.3. インデックススキャン
49.4. インデックスのロック処理に関する検討
49.5. インデックス一意性検査
49.6. インデックスコスト推定関数

本章は、PostgreSQL の中核システムと、個々のインデックス種類を管理するインデックスアクセスメソッドとのインタフェースを定義します。 中核システムには、インデックスの仕様のみを把握しています。 したがって、追加コードを記述することで完全に新しいインデックス種類を開発することができます。

PostgreSQLのインデックスはすべて、技術的には補助的なインデックスとして知られるものです。 つまり、インデックスは対象となるテーブルファイルとは物理的に分かれています。 各インデックスは独自の物理的なリレーションとして格納され、また、pg_classカタログ内の項目として記述されます。 インデックスの内容は完全にそのインデックスアクセスメソッドの制御下にあります。 実際、すべてのインデックスアクセスメソッドは、通常の格納マネージャとバッファマネージャを使用してインデックスの内容にアクセスできるように、インデックスを標準サイズのページに分割します。 (既存のすべてのインデックスアクセスメソッドはさらに、項52.3で説明する標準ページレイアウトを使用し、すべて同じ書式をインデックスタプルヘッダに使用します。 しかし、これはアクセスメソッドに強制されていることではありません。)

インデックスは効率的にあるデータキー値を、インデックスの親テーブル内の行バージョン(タプル)のタプル識別子またはTIDsに関連付けます。 TIDは、ブロック番号、ブロック内の項目番号(項52.3を参照)から構成されます。 これは、特定の行バージョンをテーブルから取り出すのに十分な情報です。 MVCCでは1つの論理的な行に複数の現在のバージョンがあることを、インデックスが直接意識することはありません。 インデックスでは、各タプルは、独自にインデックス項目を持たなければならない独立したオブジェクトです。 したがって、行を更新すると、キーの値が変わっていなかってとしても、その行に対してまったく新しいインデックス項目が作成されます。 (バキューム実行によって)不要タプル自身が回収された時に、不要タプルに対するインデックス項目は回収されます。