BRINインデックスは便利に思えますが、ENUMタイプでどのように使用するかはわかりません。私はこのコードがうまくいくと思いました:
CREATE TYPE test_enum AS ENUM ('a', 'b');
CREATE TEMPORARY TABLE my_table (
x test_enum
);
CREATE INDEX test_index ON my_table using brin (x);
ERROR: data type test_enum has no default operator class for access method "brin"
新しい演算子クラスを作成する を最初から作成する必要がありますか?列挙型はすでに注文されていませんか?
2014年からのこのコミット は、BRINインデックスがENUMタイプで機能することを意味します。
列挙型はすでに注文されていませんか?
いいえ
2014年からのこのコミットは、BRINインデックスがENUMタイプで機能することを意味しています。
それは実際にはそのコミットメントが言うことではありません。 指定したリンクのコミットメッセージ から
このタイプの演算子クラスは「Minmax」と呼ばれ、Bツリーopclassを使用して、ほとんどのデータ型にそれらを提供します。 BRINコードは一般化されているため、他のアプローチは、配列、幾何タイプ、範囲などの可能です。列挙型などの場合でも、couldはminmaxとは異なる何かを実行して、より良い結果をもたらします。このコミットでは、minmaxのみを含めています。
それが今あるという意味ではありません。 「パッチ受け入れ済み」のPostgreSQLです。実際、コミットは明示的に言っています、
+/* no brin opclass for enum, tsvector, tsquery, jsonb, range */
実際、ENUM
のBRINインデックスを作成するには、Cをある程度使用し、インデックス演算子クラスの実装に関する知識(pick/split/insert/merge)が必要になります。