11.6. 操作符資料表

一次索引定義可以為索引的每個字串聲明一個 操作符資料表(operator class)

CREATE INDEX name ON table (column opclass [, ...]);

這個操作符資料表標識該索引用於該字串要使用的操作符。 例如,一個在int4上的 B-tree 索引將使用 int4_ops 資料表; 這個操作符資料表包括用於int4的比較函數。 實際上,該字串類型的預設操作符通常就足夠了。 擁有操作符資料表的原因是:對於某些資料類型,可能存在多於一個有意義的索引行為。 例如,我們可能想排序兩個複數,既可能透過絕對值, 也可能透過實部。我們可以透過為該資料類型定義兩個操作符資料表,然後在建立索引時選擇合適的一個來實現這個目的。

除了預設的以外,還有一些有內置的操作符資料表:

下面的查詢顯示所有已定義的操作符資料表:

SELECT am.amname AS index_method,
       opc.opcname AS opclass_name
    FROM pg_am am, pg_opclass opc
    WHERE opc.opcamid = am.oid
    ORDER BY index_method, opclass_name;

我們可以把它擴展為顯示每個資料表中的所有操作符:

SELECT am.amname AS index_method,
       opc.opcname AS opclass_name,
       opr.oprname AS opclass_operator
    FROM pg_am am, pg_opclass opc, pg_amop amop, pg_operator opr
    WHERE opc.opcamid = am.oid AND
          amop.amopclaid = opc.oid AND
          amop.amopopr = opr.oid
    ORDER BY index_method, opclass_name, opclass_operator;