関数インデックスではインデックスは、一つの テーブルの一つ以上のカラムに適用された関数の結果上で定義されます。 関数インデックスは、関数呼び出しの結果に基づくデータへの速いアクセス を得るために使うことができます。
例えば、大文字小文字が関係ない比較をするための一般的な方法は lowerを使うことです。
SELECT * FROM test1 WHERE lower(col1) = 'value';その問い合わせがインデックスを使うためには、 lower(column)演算の結果上で定義されなければいけません。
CREATE INDEX test1_lower_col1_idx ON test1 (lower(col1));
インデックス定義の関数は一つ以上の引数を取ることができますが、 定数ではなくテーブルカラムでなくてはいけません。関数インデックス は、もしその関数が一つ以上の入力フィールドを使うとしても 常にシングルカラム(すなわち関数の結果)です。関数呼び出しを含む マルチカラムインデックスはありえないのです。
Tip: 前の段落で言及された制約は、求められる関数を内部的に呼び出す インデックス定義の中で使うカスタム関数を定義することで簡単に 回避することができます。