关于 YMatrix
标准集群部署
数据写入
数据迁移
数据查询
运维监控
参考指南
工具指南
数据类型
存储引擎
执行引擎
流计算引擎
灾难恢复
系统配置参数
索引
扩展
SQL 参考
常见问题(FAQ)
定义一个新的运算符类。
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>
} [, ... ]
CREATE OPERATOR CLASS 创建一个新的运算符类。运算符类定义特定数据类型如何与索引配合使用。该类指定某些运算符将在此数据类型和索引方法中承担特定角色或策略,同时规定当索引列选用该运算符类时,索引方法应调用的支持函数。操作符类使用的所有操作符和函数必须在创建操作符类之前定义。用于实现操作符类的任何函数都必须定义为IMMUTABLE。
若指定模式名称,则操作符类将在指定模式中创建;否则创建于当前模式。同一模式中两个操作符类仅当它们对应不同索引方法时才能使用相同名称。
定义运算符类的用户将成为其所有者。目前,创建者必须是超级用户。(此限制是因为错误的运算符类定义可能导致服务器混乱甚至崩溃。)
CREATE OPERATOR CLASS 语法目前不会检查运算符类定义是否包含索引方法所需的所有运算符和函数,也不会验证这些运算符与函数是否构成自洽集合。用户有责任确保所定义的运算符类有效。
相关运算符类可归入运算符家族。若要在现有家族中添加新运算符类,请在CREATE OPERATOR CLASS语句中指定FAMILY选项。若未指定该选项,新类将被置于与之同名的家族中(若该家族不存在,数据库将自动创建)。
name
DEFAULT
data_type
index_method
family_name
strategy_number
operator_name
op_type
在OPERATOR子句中,指定运算符的操作数数据类型,或使用NONE表示左单项运算符或右单项运算符。当操作数数据类型与运算符类的数据类型相同时,通常可省略操作数数据类型。
在FUNCTION子句中,若函数支持的操作数数据类型与函数的输入数据类型(针对B树比较函数和哈希函数)或类的数据类型(针对B树排序支持函数以及GiST、SP-GiST、GIN和BRIN运算符类中的所有函数)不同,则需指定该操作数数据类型。这些默认值是正确的,因此在FUNCTION子句中无需指定op_type,除非该B树排序支持函数旨在支持跨数据类型比较。
sort_family_name
现有 B 树运算符家族的名称(可选带模式限定),该家族描述了与排序运算符关联的排序顺序。
如果既未指定 FOR SEARCH 也未指定 FOR ORDER BY,则默认使用 FOR SEARCH。
support_number
function_name
argument_type
storage_type
由于索引机制在使用函数前不会检查访问权限,因此将函数或运算符包含在运算符类中,等同于授予其公共执行权限。对于运算符类中常用的函数类型而言,这通常不会构成问题。
操作符不应通过SQL函数定义。SQL函数很可能被内联到调用查询中,这将阻止优化器识别该查询与索引匹配。
用于实现操作符类的任何函数都必须定义为IMMUTABLE。
在数据库 6.0 之前,OPERATOR 子句可包含 RECHECK 选项。该选项现已不再支持。数据库现在会在运行时动态判断索引操作符是否具有"丢失性"。这使得在操作符可能具有或不具有丢失性的情况下,能够更高效地进行处理。
以下示例命令为数据类型 _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);
CREATE OPERATOR CLASS 是数据库扩展功能。SQL 标准中不存在 CREATE OPERATOR CLASS 语句。
ALTER OPERATOR CLASS, DROP OPERATOR CLASS, CREATE OPERATOR FAMILY, ALTER OPERATOR FAMILY, CREATE FUNCTION