Postgresql

BRIN 索引是否支持 ENUM 類型?

  • December 19, 2018

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-tree 操作類的數據類型提供了一堆。由於 BRIN 程式碼是通用的,因此可以使用其他方法來處理諸如數組、幾何類型、範圍等之類的事物;即使對於諸如列舉類型之類的東西,我們也可以做一些不同於 minmax 的事情,從而獲得更好的結果。在這個送出中,我只包括 minmax。

這並不意味著它現在就在那裡。它是 PostgreSQL 的“接受的更新檔”。事實上,送出明確表示,

+/* no brin opclass for enum, tsvector, tsquery, jsonb, range */

實際上,為 afaik 創建一個 BRIN 索引ENUM需要使用 C 和索引運算符類實現(pick/split/insert/merge)的知識。

引用自:https://dba.stackexchange.com/questions/225213