DOKK / manpages / debian 10 / manpages-zh / create_operator_class.7.zh_TW
CREATE OPERATOR CLASS(7) SQL Commands CREATE OPERATOR CLASS(7)

CREATE OPERATOR CLASS - 定義一個新的操作符類

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 目前並不檢查這個類定義是否包含所有索引方法需要操作符以及函數。 定義一個合法的操作符表是用戶的責任。


參考 ``Interfacing Extensions to Indexes'' 獲取更多信息。


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

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

這個操作符表處理的字段數據類型。

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

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

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

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

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

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

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

函數的參數數據類型。

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

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


下面的例子命令爲數據類型 _int4(int4 的數組)定義了一個 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 [alter_operator_class(7)], DROP OPERATOR CLASS [drop_operator_class(l)]

譯者

Postgresql 中文網站 何偉平 <laser@pgsqldb.org>

本頁面中文版由中文 man 手冊頁計劃提供。
中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh

2003-11-02 SQL - Language Statements