kar*_*ldw 5 postgresql index enum postgresql-10 postgresql-11
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"
Run Code Online (Sandbox Code Playgroud)
我是否必须从头开始创建一个新的运算符类?枚举不是已经订购了吗?
这个提交,从 2014 开始,意味着 BRIN 索引应该适用于 ENUM 类型。
枚举不是已经订购了吗?
不。
从 2014 年开始的这个提交意味着 BRIN 索引应该适用于 ENUM 类型。
这种类型的操作符类我们称为“Minmax”,我们为大多数带有 B 树操作类的数据类型提供了一堆它们。由于 BRIN 代码是通用的,因此其他方法也可以用于数组、几何类型、范围等;即使对于 enum 类型之类的事情,我们也可以做一些与 minmax 不同的事情,以获得更好的结果。在这次提交中,我只包括 minmax。
这并不意味着它现在就在那里。它是“接受补丁”的 PostgreSQL。事实上,提交明确说,
+/* no brin opclass for enum, tsvector, tsquery, jsonb, range */
Run Code Online (Sandbox Code Playgroud)
实际上,为一个 BRIN 索引创建一个ENUM
是,afaik,将需要一些 C 的使用和索引运算符类实现的知识(pick/split/insert/merge)。