BRIN 索引是否支持 ENUM 类型?

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 类型。

Eva*_*oll 5

枚举不是已经订购了吗?

不。

从 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)。