CREATE OPERATOR CLASS

Name

CREATE OPERATOR CLASS -- 定義一個新的操作符資料表

Synopsis

CREATE OPERATOR CLASS name [ DEFAULT ] FOR TYPE data_type USING index_method AS
  {  OPERATOR strategy_number operator_name [ ( op_type, op_type ) ] [ RECHECK ]
   | FUNCTION support_number funcname ( argument_type [, ...] )
   | STORAGE storage_type
  } [, ... ]

描述

CREATE OPERATOR CLASS 定義一個新的操作符資料表。 一個操作符資料表定義一種特定的資料類型可以如何與一種索引一起使用。 操作符資料表聲明特定的操作符可以為這種資料類型以及這種索引方法填充特定角色或者"策略"。 操作符資料表還聲明索引方法在為一個索引字串選定該操作符資料表的時候要使用的支援過程。 所有操作符資料表使用的函數和操作符都必須在建立操作符資料表之前定義。

如果給出了模式名字,那麼操作符資料表就在指定的模式中建立。 否則就在目前模式中建立(在搜索路徑前面的那個;參閱 CURRENT_SCHEMA())。 在同一個模式中的兩個操作符資料表可以有同樣的名字,但它們必須用於不同的索引方法。

定義操作符資料表的用戶成為其所有者。目前,創造者必須是超級用戶。 (作這樣的限制是因為一個有問題的操作符資料表定義會讓伺服器困惑,甚至崩潰。)

目前 CREATE OPERATOR CLASS 並不檢查這個類定義是否包含所有索引方法需要操作符以及函數。 定義一個合法的操作符資料表是用戶的責任。

參考 Section 31.14 獲取更多訊息。

參數

name

將要建立的操作符資料表的名字。名字可以用模式修飾。

DEFAULT

如果出現了這個鍵字,那麼該操作符資料表將成為它的資料類型的預設操作符資料表。 對於某個資料類型和訪問方式而言,最多可以有一個操作符資料表是預設的。

data_type

這個操作符資料表處理的字串資料類型。

index_method

這個操作符資料表處理的索引訪問方式的名字。

strategy_number

一個操作符和這個操作符資料表關聯的索引訪問方式的策略數。

operator_name

一個和該操作符資料表關聯的操作符的名字(可以用模式修飾)。

op_type

一個操作符的輸入資料類型,或者是 NONE 資料表示左目或者右目操作符。 通常情況下可以省略輸入資料類型,因為這個時候它們和操作符資料表的資料類型相同。

RECHECK

如果出現,那麼索引對這個操作符是"lossy"(有損耗的), 因此,使用這個索引檢索的行必須重新檢查,以保證它們真正滿足和此操作符相關的條件子句。

support_number

索引方法對一個與操作符資料表關聯的函數的支援過程數。

funcname

一個函數的名字(可以有模式修飾),這個函數是索引訪問方式對此操作符資料表的支援過程。

argument_types

函數的參數資料類型。

storage_type

實際儲存在索引裡的資料類型。通常它和字串資料類型相同, 但是一些索引方法(到目前為止只有 GIST)允許它是不同的。 除非索引方法允許使用一種不同的類型,否則必須省略 STORAGE 子句。

OPERATORFUNCTION,和 STORAGE 子句可以按照任意順序出現。

注意

操作符不應該用 SQL 函數定義。一個 SQL 函數很可能是內聯到調用它的查詢裡面, 這樣將阻止優化器識別這個查詢是否可以使用索引。

例子

下面的例子命令為資料類型 _int4int4 的數組)定義了一個 GiST 索引操作符資料表。 參閱 contrib/intarray/ 獲取完整的例子。

CREATE OPERATOR CLASS gist__int_ops
    DEFAULT FOR TYPE _int4 USING gist AS
        OPERATOR        3       &&,
        OPERATOR        6       =       RECHECK,
        OPERATOR        7       @,
        OPERATOR        8       ~,
        OPERATOR        20      @@ (_int4, query_int),
        FUNCTION        1       g_int_consistent (internal, _int4, int4),
        FUNCTION        2       g_int_union (bytea, internal),
        FUNCTION        3       g_int_compress (internal),
        FUNCTION        4       g_int_decompress (internal),
        FUNCTION        5       g_int_penalty (internal, internal, internal),
        FUNCTION        6       g_int_picksplit (internal, internal),
        FUNCTION        7       g_int_same (_int4, _int4, internal);

相容性

CREATE OPERATOR CLASS 是一個 PostgreSQL 擴展。 在 SQL 標準中沒有 CREATE OPERATOR CLASS

又見

ALTER OPERATOR CLASS, DROP OPERATOR CLASS