# ALTER运算符族

更改运算符族-更改运算符族的定义

# 提要

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

# 描述

ALTER运算符族更改操作符族的定义。可以向族中添加操作符和支持函数,将其从族中删除,或更改族的名称或所有者。

将运算符和支持函数添加到具有ALTER运算符族,它们不是族中任何特定操作符类的一部分,只是族中的“松散”操作符。这表明这些运算符和函数与族的语义兼容,但不是任何特定索引正确运行所必需的。(所需的运算符和函数应声明为运算符类的一部分;请参见创建操作符类)PostgreSQL将允许随时从族中删除族中松散的成员,但如果不删除整个类及其依赖的任何索引,则无法删除运算符类的成员。通常,单个数据类型的运算符和函数是运算符类的一部分,因为它们需要支持该特定数据类型的索引,而跨数据类型的运算符和函数则是该族的松散成员。

您必须是超级用户才能使用ALTER运算符族(做出此限制是因为错误的操作员系列定义可能会混淆甚至使服务器崩溃。)

ALTER运算符族目前不检查运算符族定义是否包含索引方法所需的所有运算符和函数,也不检查运算符和函数是否形成自洽集。用户有责任定义有效的操作员系列。

提到第38.16节了解更多信息。

# 参数

名称

现有运算符族的名称(可选模式限定)。

指数法

此运算符族用于的索引方法的名称。

策略编号

与运算符族关联的运算符的索引方法策略编号。

操作员姓名

与运算符族关联的运算符的名称(可选模式限定)。

op_型

在一个操作人员子句,运算符的操作数数据类型,或没有一个表示前缀运算符。与中类似的语法不同创建操作符类,必须始终指定操作数数据类型。

在一个添加函数子句,如果与函数的输入数据类型不同,则函数要支持的操作数数据类型。对于B树比较函数和哈希函数,不需要指定*op_型*因为函数的输入数据类型总是正确的。对于B-tree排序支持函数、B-tree equal image函数以及GiST、SP GiST和GIN运算符类中的所有函数,必须指定该函数要使用的操作数数据类型。

在一个下降函数子句中,必须指定函数要支持的操作数数据类型。

按姓氏排序

现有架构的名称(可选架构限定)B树描述与排序运算符关联的排序的运算符族。

如果两者都不是搜寻也没有订购是指定的,搜寻是默认值。

支持号码

与运算符族关联的函数的索引方法支持函数号。

函数名

作为运算符族的索引方法支持函数的函数的名称(可选模式限定)。如果未指定参数列表,则名称在其架构中必须是唯一的。

参数类型

函数的参数数据类型。

新名字

操作员系列的新名称。

新老板

运营商家族的新主人。

新的_模式

运算符族的新架构。

这个操作人员作用子句可以以任何顺序出现。

# 笔记

请注意语法仅按策略或支持编号和输入数据类型指定操作员系列中的“插槽”。未提及占用插槽的运算符或函数的名称。还有下降函数要指定的类型是该函数要支持的输入数据类型;对于GiST、SP GiST和GIN索引,这可能与函数的实际输入参数类型无关。

因为索引机制在使用函数之前不会检查它们的访问权限,所以在操作符族中包含函数或操作符就相当于对其授予公共执行权限。对于运算符族中有用的函数类型来说,这通常不是一个问题。

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

在PostgreSQL 8.4之前操作人员条款可以包括复查选项这不再受支持,因为索引运算符是否“有损”现在是在运行时动态确定的。这样可以有效地处理操作员可能有损或可能没有损的情况。

# 例子

下面的示例命令将跨数据类型运算符和支持函数添加到已包含数据类型的B树运算符类的运算符族中int4int2.

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) ;

# 兼容性

没有ALTER运算符族SQL标准中的语句。

# 另见

创建运算符族, DROP OPERATOR系列, 创建操作符类, 变换运算符类, 删除运算符类