关于 YMatrix
标准集群部署
数据写入
数据迁移
数据查询
运维监控
参考指南
工具指南
数据类型
存储引擎
执行引擎
流计算引擎
灾难恢复
系统配置参数
索引
扩展
SQL 参考
常见问题(FAQ)
更改操作符族的定义。
ALTER OPERATOR FAMILY <name> USING <index_method> ADD
{ 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> [, ...] )
} [, ... ]
ALTER OPERATOR FAMILY <name> USING <index_method> DROP
{ OPERATOR <strategy_number> ( <op_type> [ , <op_type> ] )
| FUNCTION <support_number> ( <op_type> [ , <op_type> ] )
} [, ... ]
ALTER OPERATOR FAMILY <name> USING <index_method> RENAME TO <new_name>
ALTER OPERATOR FAMILY <name> USING <index_method> OWNER TO { <new_owner> | CURRENT_USER | SESSION_USER }
ALTER OPERATOR FAMILY <name> USING <index_method> SET SCHEMA <new_schema>
ALTER OPERATOR FAMILY 用于更改运算符家族的定义。您可以向家族添加运算符和辅助函数,从家族中移除它们,或更改家族名称或所有者。
当使用 ALTER OPERATOR FAMILY 将运算符和辅助函数添加到家族时,它们不属于家族内任何特定的运算符类,而只是“松散”地存在于家族中。这表明这些运算符和函数兼容该家族的语义,但并非特定索引正确运行的必需组件。(必需的运算符和函数应声明为运算符类的一部分,详见 CREATE OPERATOR CLASS。) 可随时从家族中删除松散成员,但操作符类的成员必须连同整个类及其依赖索引一并删除。通常,单数据类型操作符和函数属于操作符类,因其用于支持特定数据类型的索引;而跨数据类型操作符和函数则作为家族的松散成员存在。
必须具备超级用户权限才能使用 ALTER OPERATOR FAMILY 命令。(此限制源于错误的操作符家族定义可能导致服务器混乱甚至崩溃。)
当前 ALTER OPERATOR FAMILY 不会检查运算符家族定义是否包含索引方法所需的所有运算符和函数,也不会验证这些运算符和函数是否构成自洽集合。用户有责任定义有效的运算符家族。
OPERATOR 和 FUNCTION子句可以以任何顺序出现。
请注意,DROP 语法仅通过策略或支持编号及输入数据类型来指定运算符家族中的“slot”,并未提及占据该槽位的运算符或函数名称。此外,对于 DROP FUNCTION,需指定的类型是函数计划支持的输入数据类型。对于 GiST、SP_GiST 和 GIN 索引,可能无需对该函数的 实际输入参数类型做任何事情。
由于索引机制在使用函数前不会检查访问权限,将函数或运算符纳入运算符家族等同于授予其公共执行权限。对于运算符家族中常用的函数类型,这通常不会构成问题。
运算符不应通过 SQL 函数定义。SQL 函数很可能被内联到调用查询中,这将导致优化器无法识别查询与索引的匹配关系。
下列示例命令为一个操作符族增加跨数据类型的操作符和支持函数,该操作符族已经包含用于数据类型int4以及int2的 B-树 操作符类。
ALTER OPERATOR FAMILY integer_ops USING btree ADD
-- int4 vs int2
OPERATOR 1 < (int4, int2) ,
OPERATOR 2 <= (int4, int2) ,
OPERATOR 3 = (int4, int2) ,
OPERATOR 4 >= (int4, int2) ,
OPERATOR 5 > (int4, int2) ,
FUNCTION 1 btint42cmp(int4, int2) ,
-- int2 vs int4
OPERATOR 1 < (int2, int4) ,
OPERATOR 2 <= (int2, int4) ,
OPERATOR 3 = (int2, int4) ,
OPERATOR 4 >= (int2, int4) ,
OPERATOR 5 > (int2, int4) ,
FUNCTION 1 btint24cmp(int2, int4) ;
再次移除这些项:
ALTER OPERATOR FAMILY integer_ops USING btree DROP
-- int4 vs int2
OPERATOR 1 (int4, int2) ,
OPERATOR 2 (int4, int2) ,
OPERATOR 3 (int4, int2) ,
OPERATOR 4 (int4, int2) ,
OPERATOR 5 (int4, int2) ,
FUNCTION 1 (int4, int2) ,
-- int2 vs int4
OPERATOR 1 (int2, int4) ,
OPERATOR 2 (int2, int4) ,
OPERATOR 3 (int2, int4) ,
OPERATOR 4 (int2, int4) ,
OPERATOR 5 (int2, int4) ,
FUNCTION 1 (int2, int4) ;
在 SQL 标准中没有 ALTER OPERATOR FAMILY语句。
CREATE OPERATOR FAMILY, DROP OPERATOR FAMILY, CREATE OPERATOR CLASS, ALTER OPERATOR CLASS, DROP OPERATOR CLASS