VastbaseE100

基于开源技术的HTAP数据库管理系统。性能优异,稳定可靠,提供诸多专属领域特性。

Menu

ALTER OPERATOR FAMILY

ALTER OPERATOR FAMILY - 更改运算符系列的定义

语法格式

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。)Vastbase E100将允许一个系列的松散成员随时从该系列中删除,但运算符类的成员不能删除而不删除整个类和任何依赖它的索引。通常,单数据类型的运算符和函数是运算符类的一部分,因为它们需要支持该特定数据类型的索引,而跨数据类型的运算符和函数则是该系列的松散成员。

您必须是超级用户才能使用 ALTER OPERATOR FAMILY 。(这种限制是因为错误的操作符族定义可能会使服务器混淆甚至崩溃。)

ALTER OPERATOR FAMILY目前不检查运算符族定义是否包括索引方法所需的所有运算符和函数,以及运算符和函数是否形成自洽集。用户有责任定义有效的运算符族。

参数说明

  • name

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

  • index_method

    此运算符系列的索引方法的名称。

  • strategy_number

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

  • operator_name

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

  • op_type

    在 OPERATOR 子句中,操作符的操作数数据类型,或 NONE表示左一元或右一元运算符。与 CREATE OPERATOR CLASS中的可比语法不同,必须始终指定操作数数据类型。在 ADD FUNCTION 子句中,如果函数的输入数据类型不同,则该函数要支持的操作数数据类型。对于B树比较函数和散列函数,没有必要指定op_type,因为函数的输入数据类型总是正确的使用。对于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 子句可以按任何顺序出现。

注意事项

请注意, DROP语法仅通过策略或支持编号和输入数据类型指定运算符族中的”槽”。未提及占用插槽的操作员或功能的名称。此外,对于DROP FUNCTION,要指定的类型是函数要支持的输入数据类型;对于GiST,SP-GiST和GIN索引,这可能与函数的实际输入参数说明类型无关。

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

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

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

示例

以下示例命令将跨数据类型运算符和支持函数添加到已包含数据类型 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) ;