式インデックス
列そのものではなく、式や関数の計算結果に対して張るインデックス。CREATE INDEX ON users (lower(email))とすればWHERE lower(email) = ...が速くなる。関数インデックスとも呼ばれる。
典型的な用途は、大文字小文字を区別しない検索(lower())、JSONBのフィールド((data->>'country'))、計算キー(date_trunc('day', created_at))など。条件として、式はIMMUTABLE(決定的)でなければならず、now()は使えない。また、プランナーがインデックスを使うには、クエリがインデックスと全く同じ式を書いている必要がある。
代償は、書き込みのたびに値が再計算されること。生成列(値を実際の列に実体化する)とは異なり、式インデックスは索引された結果だけを保持する。冗長な列を増やしたくないときによく使われる。