创建操作员班

创建操作员类别—定义新的操作员类别

Synopsis

CREATE OPERATOR CLASS name [ DEFAULT ] FOR TYPE data_type
  USING index_method [ FAMILY family_name ] AS
  {  OPERATOR strategy_number operator_name [ ( op_type, op_type ) ] [ FOR SEARCH | FOR ORDER BY sort_family_name ]
   | FUNCTION support_number [ ( op_type [ , op_type ] ) ] function_name ( argument_type [, ...] )
   | STORAGE storage_type
  } [, ... ]

Description

CREATE OPERATOR CLASS创建一个新的运算符类。运算符类定义如何将特定数据类型与索引一起使用。操作员类别指定某些操作员将为此数据类型和此索引方法填充特定角色或“策略”。当为索引列选择操作符类时,操作符类还指定索引方法要使用的支持功能。必须先定义操作符类使用的所有操作符和函数,然后才能创建该操作符类。

如果指定了架构名称,则会在指定的架构中创建操作符类。否则,它将在当前架构中创建。同一模式中的两个运算符类仅在用于不同的索引方法时才可以使用相同的名称。

定义操作员类别的用户将成为其所有者。当前,创建用户必须是超级用户。 (之所以做出此限制,是因为错误的运算符类定义可能会使服务器困惑甚至崩溃.)

CREATE OPERATOR CLASS目前不检查运算符类定义是否包括索引方法所需的所有运算符和函数,也不检查运算符和函数是否形成一个自洽集合。定义有效的操作员类别是用户的责任。

相关的操作员类别可以分为* operator family *。要将新的操作员类别添加到现有系列中,请在CREATE OPERATOR CLASS中指定FAMILY选项。如果没有此选项,则将新类放置到与新类相同的族中(如果该族尚不存在,则创建该族)。

有关更多信息,请参考Section 38.15

Parameters

FUNCTION子句中,函数要支持的操作数数据类型(如果不同于函数的 Importing 数据类型(对于 B 树比较函数和哈希函数)或类的数据类型(对于 B 树排序支持功能以及 GiST,SP-GiST,GIN 和 BRIN 运算符类中的所有功能)。这些默认值是正确的,因此FUNCTION子句中无需指定* op_type *,除非 B 树排序支持功能旨在支持跨数据类型比较。

如果既未指定FOR SEARCH也未指定FOR ORDER BY,则默认值为FOR SEARCH

OPERATORFUNCTIONSTORAGE子句可以按任何 Sequences 出现。

Notes

因为索引机制在使用函数之前不会检查对函数的访问权限,所以在运算符类中包括函数或运算符就等于授予对其的公共执行权限。对于运算符类中有用的各种函数,通常这不是问题。

运算符不应由 SQL 函数定义。 SQL 函数很可能内联到调用查询中,这将阻止优化器识别查询与索引匹配。

在 PostgreSQL 8.4 之前,OPERATOR子句可以包含RECHECK选项。不再支持此操作,因为现在可以在运行时即时确定索引运算符是否“有损”。这样可以有效地处理操作员可能会或可能不会有损失的情况。

Examples

以下示例命令为数据类型_int4(数组int4)定义了 GiST 索引运算符类。有关完整示例,请参见intarray模块。

CREATE OPERATOR CLASS gist__int_ops
    DEFAULT FOR TYPE _int4 USING gist AS
        OPERATOR        3       &&,
        OPERATOR        6       = (anyarray, anyarray),
        OPERATOR        7       @>,
        OPERATOR        8       <@,
        OPERATOR        20      @@ (_int4, query_int),
        FUNCTION        1       g_int_consistent (internal, _int4, smallint, oid, internal),
        FUNCTION        2       g_int_union (internal, 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);

Compatibility

CREATE OPERATOR CLASS是 PostgreSQL 扩展。 SQL 标准中没有CREATE OPERATOR CLASS语句。

See Also

变更操作员类别, 降落操作员班, 创建运算符家庭, 运算符家族

上一章 首页 下一章