Postgresql 中文操作指南
Synopsis
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_ROLE | CURRENT_USER | SESSION_USER }
ALTER OPERATOR FAMILY name USING index_method
SET SCHEMA new_schema
Description
ALTER OPERATOR FAMILY 更改操作符族的定义。您可以在族中添加操作符和支持函数,从族中移除操作符和支持函数,或更改族的名称或所有者。
当在使用 ALTER OPERATOR FAMILY 向一个族中添加操作符和支持函数时,它们并不属于族中的任何特定操作符类,而是仅为族中的“松散”成员。这表明这些操作符和函数与族的语义兼容,但不是任何特定索引正确工作的必要条件。(如此要求的操作符和函数应该作为操作符类的一部分声明;参见 CREATE OPERATOR CLASS 。)PostgreSQL 将允许族中的松散成员在任何时候从族中被删除,但操作符类的成员不能被删除,而不删除整个类和依赖于该类的任何索引。通常,单一数据类型操作符和函数属于操作符类,因为需要它们来支持特定数据类型的索引,而跨数据类型操作符和函数则成为族的松散成员。
您必须是超级用户才能使用 ALTER OPERATOR FAMILY 。(此限制原因在于,错误的操作符族定义可能会使服务器混淆或崩溃。)
ALTER OPERATOR FAMILY 目前不检查操作符族定义是否包括索引方法所需的所有操作符和函数,也不检查操作符和函数是否形成自洽集。定义有效操作符族是用户的责任。
有关更多信息,请参阅 Section 38.16 。
Parameters
-
name
-
现有操作符族的名称(可选架构限定)。
-
-
index_method
-
此操作符族所属的索引方法的名称。
-
-
strategy_number
-
索引方法的与操作符族关联的操作符的策略号。
-
-
operator_name
-
与操作符族关联的操作符的名称(可选架构限定)。
-
-
op_type
-
在 OPERATOR 子句中,操作符的操作数字类型,或 NONE 表示前缀操作符。与 CREATE OPERATOR CLASS 中类似的语法不同,操作数数据类型必须始终指定。
-
在 ADD FUNCTION 子句中,如果与函数的输入数据类型不同,则函数支持的操作数数据类型(如果不同)。对于 B 树比较函数和哈希函数,无需指定 op_type ,因为函数的输入数据类型始终是正确的使用类型。对于 B 树排序函数、B 树相等图像函数以及 GiST、SP-GiST 和 GIN 运算符类中的所有函数,必须指定与函数配合使用的操作数数据类型。
-
在 DROP FUNCTION 子句中,必须指定函数支持的操作数数据类型。
-
-
sort_family_name
-
关联排序运算符的排序顺序说明了现有 btree 运算符系列(可选加上架构限定)的名称。
-
如果未同时指定 FOR SEARCH 和 FOR ORDER BY ,则 FOR SEARCH 为默认值。
-
-
support_number
-
索引方法关联至运算符系列之函数的支持函数编号。
-
-
function_name
-
函数的索引方法支持函数(可选加上架构限定)的名称。如果未指定参数列表,则此名称在架构中必须是唯一的。
-
-
argument_type
-
函数的参数数据类型。
-
-
new_name
-
运算符系列的新名称。
-
-
new_owner
-
运算符系列的新所有者。
-
-
new_schema
-
运算符系列的新架构。
-
OPERATOR 和 FUNCTION 子句可以按任意顺序显示。
Notes
请注意, DROP 语法仅按策略或支持编号和输入数据类型指定运算符系列的“槽”。未提及占用槽的运算符或函数的名称。此外,对于 DROP FUNCTION ,要指定支持该函数的输入数据类型;对于 GiST、SP-GiST 和 GIN 索引,输入数据类型可能与该函数的实际输入参数类型无关。
由于索引机制在使用函数之前不会检查函数的访问权限,因此在运算符系列中包含函数或运算符等同于授予该函数或运算符公共执行权限。对于在运算符系列中有用的函数类别,通常这不是问题。
运算符不应由 SQL 函数定义。SQL 函数可能会内联到调用查询中,这将阻止优化器识别查询是否匹配某个索引。
在 PostgreSQL 8.4 之前, OPERATOR 子句可以包含 RECHECK 选项。不再支持此选项,因为索引运算符是“有损”的,现在在运行时动态确定。这允许高效处理运算符可能是有损或无损的情况。
Examples
以下示例命令将跨数据类型运算符和支持函数添加到已包含数据类型 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) ;