↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

Wiki / SQL 命令

ALTER OPERATOR FAMILY

更改一个操作符族的定义

英文手册覆盖始于 PostgreSQL 6.4. 来源历史与运行验证各自保留独立版本边界。

当前阅读 PG 18·选择有来源记录的版本

anchor
SQL-ALTEROPFAMILY
file
sql-alteropfamily.html
lang
en
name
ALTER OPERATOR FAMILY
purpose
change the definition of an operator family
purpose zh
未知
sections same as
未知
slug
18

语法

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 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 · 语法 2
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 · 语法 3
ALTER OPERATOR FAMILY name USING index_method RENAME TO new_name
ALTER OPERATOR FAMILY · 语法 4
ALTER OPERATOR FAMILY name USING index_method OWNER TO new_owner CURRENT_ROLE CURRENT_USER SESSION_USER
ALTER OPERATOR FAMILY · 语法 5
ALTER OPERATOR FAMILY name USING index_method SET SCHEMA new_schema

版本定义 PG 18

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 OPERATOR FAMILY更改一个操作符族的定义。你可以向该族添加操作符和支持函数、从该族中移除它们,或者更改该族的名称或拥有者。

使用ALTER OPERATOR FAMILY向一个族中添加操作符和支持函数时,它们并不属于该族内任何特定的操作符类,而只是作为该族中的“松散”成员存在。这表明这些操作符和函数与该族的语义兼容,但并不是任何特定索引正确工作所必需的。(那些确实必需的操作符和函数应当声明为某个操作符类的一部分;参见CREATE OPERATOR CLASS。)PostgreSQL允许随时从一个族中删除松散成员,但如果不删除整个类以及依赖它的任何索引,就不能删除操作符类的成员。通常,单一数据类型的操作符和函数属于操作符类,因为支持该特定数据类型上的索引需要它们,而跨数据类型的操作符和函数则作为该族中的松散成员。

要使用ALTER OPERATOR FAMILY,你必须是超级用户。(之所以这样限制,是因为错误的操作符族定义可能会使服务器混乱,甚至导致崩溃。)

ALTER OPERATOR FAMILY目前不会检查操作符族定义是否包括该索引方法所要求的全部操作符和函数,也不会检查这些操作符和函数是否构成一个自洽的集合。定义一个合法的操作符族是用户的责任。

更多信息请参见第 36.16 节。

参数

name

一个现有操作符族的名称(可以是模式限定的)。

index_method

该操作符族所对应的索引方法名称。

strategy_number

与该操作符族关联的操作符的索引方法策略号。

operator_name

与该操作符族关联的操作符名称(可以是模式限定的)。

op_type

在OPERATOR子句中,表示该操作符的操作数数据类型,或者用NONE表示一个前缀操作符。不同于 CREATE OPERATOR CLASS中的对应语法,操作数数据类型必须始终显式指定。

在ADD FUNCTION子句中,如果该函数要支持的操作数数据类型不同于它的输入数据类型,则在此指定。对于 B-树比较函数和 hash 函数,不必指定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子句可以以任何顺序出现。

注解

注意,DROP语法只通过策略号或支持函数编号以及输入数据类型来指定操作符族中的“槽位”,不会提及占用该槽位的操作符或函数名称。另外,对于DROP FUNCTION,要指定的类型是该函数意图支持的输入数据类型;对于 GiST、SP-GiST 和 GIN 索引,这些类型可能与该函数实际的输入参数类型毫无关系。

因为索引机制在使用函数之前不会检查函数的访问权限,将一个函数或者操作符包括在一个操作符族中相当于在其上授予公共执行权限。这对操作符族中很有用的这类函数来说通常不成问题。

操作符不应该由 SQL 函数定义。SQL 函数很可能会被内联到调用查询中,这会妨碍优化器识别该查询匹配一个索引。

示例

下列示例命令向一个已经包含数据类型int4和int2 的 B-树操作符类的操作符族中添加跨数据类型的操作符和支持函数。

ALTER OPERATOR FAMILY integer_ops USING btree ADD

  -- int4 对 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 对 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 对 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 对 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

比较版本

完整来源事实

synopsis html

ALTER OPERATOR FAMILY <em class="replaceable"><code>name</code></em> USING <em class="replaceable"><code>index_method</code></em> ADD
  {  OPERATOR <em class="replaceable"><code>strategy_number</code></em> <em class="replaceable"><code>operator_name</code></em> ( <em class="replaceable"><code>op_type</code></em>, <em class="replaceable"><code>op_type</code></em> )
              [ FOR SEARCH | FOR ORDER BY <em class="replaceable"><code>sort_family_name</code></em> ]
   | FUNCTION <em class="replaceable"><code>support_number</code></em> [ ( <em class="replaceable"><code>op_type</code></em> [ , <em class="replaceable"><code>op_type</code></em> ] ) ]
              <em class="replaceable"><code>function_name</code></em> [ ( <em class="replaceable"><code>argument_type</code></em> [, ...] ) ]
  } [, ... ]

ALTER OPERATOR FAMILY <em class="replaceable"><code>name</code></em> USING <em class="replaceable"><code>index_method</code></em> DROP
  {  OPERATOR <em class="replaceable"><code>strategy_number</code></em> ( <em class="replaceable"><code>op_type</code></em> [ , <em class="replaceable"><code>op_type</code></em> ] )
   | FUNCTION <em class="replaceable"><code>support_number</code></em> ( <em class="replaceable"><code>op_type</code></em> [ , <em class="replaceable"><code>op_type</code></em> ] )
  } [, ... ]

ALTER OPERATOR FAMILY <em class="replaceable"><code>name</code></em> USING <em class="replaceable"><code>index_method</code></em>
    RENAME TO <em class="replaceable"><code>new_name</code></em>

ALTER OPERATOR FAMILY <em class="replaceable"><code>name</code></em> USING <em class="replaceable"><code>index_method</code></em>
    OWNER TO { <em class="replaceable"><code>new_owner</code></em> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }

ALTER OPERATOR FAMILY <em class="replaceable"><code>name</code></em> USING <em class="replaceable"><code>index_method</code></em>
    SET SCHEMA <em class="replaceable"><code>new_schema</code></em>

synopsis text

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

来源引用

完整定义与证据 JSON

定义来源

center · PostgreSQL 18 · a709ab85

正文语言: zh-Hans · 1b5ca64c