↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

百科 / SQL 命令 / 类型与运算符

SQL COMMAND · 类型与运算符

ALTER OPERATOR FAMILY

更改一个操作符族的定义

change the definition of an operator family

ALTER类型与运算符引入 8.3现存至 20 devel6 次语法变更

动词
ALTER
对象
OPERATOR FAMILY
引入版本
8.3
状态
现存
语法变更次数
6
手册小节数
6

本站手册 · 18官方文档 ↗

版本轨迹

相对 PostgreSQL 17 语法未变,正文有更新。

语法铁道图 PostgreSQL 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 · 语法 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

语法概要

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

PostgreSQL 18 手册 · 查看完整参考页

描述

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 语句。

另见

语法演化

相邻大版本之间的差异,新的在前。版本号链接到对应快照。

  1. PostgreSQL 18← 17正文更新

    正文更新
  2. PostgreSQL 17← 16正文更新

    正文更新
  3. PostgreSQL 14← 13语法变化

    + OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }正文更新
  4. PostgreSQL 13← 12正文更新

    正文更新
  5. PostgreSQL 12← 11正文更新

    正文更新
  6. PostgreSQL 11← 10正文更新

    正文更新
  7. PostgreSQL 10← 9.6语法变化

    + function_name [ ( argument_type [, ...] ) ]正文更新
  8. PostgreSQL 9.6← 9.5正文更新

    正文更新
  9. PostgreSQL 9.5← 9.4语法变化

    + OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
  10. PostgreSQL 9.2← 9.1正文更新

    正文更新
  11. PostgreSQL 9.1← 9.0语法变化

    + { OPERATOR strategy_number operator_name ( op_type, op_type ) [ FOR SEARCH | FOR ORDER BY sort_family_name ]+ ALTER OPERATOR FAMILY name USING index_method SET SCHEMA new_schema正文更新
  12. PostgreSQL 9.0← 8.4语法变化

    + | FUNCTION support_number [ ( op_type [ , op_type ] ) ] function_name ( argument_type [, ...] )+ ALTER OPERATOR FAMILY name USING index_method RENAME TO new_name+ ALTER OPERATOR FAMILY name USING index_method OWNER TO new_owner− | FUNCTION support_number [ ( op_type [ , op_type ] ) ] funcname ( argument_type [, ...] )− ALTER OPERATOR FAMILY name USING index_method RENAME TO newname− ALTER OPERATOR FAMILY name USING index_method OWNER TO newowner正文更新
  13. PostgreSQL 8.4← 8.3语法变化

    − { OPERATOR strategy_number operator_name ( op_type, op_type ) [ RECHECK ]正文更新
  14. PostgreSQL 8.3← 8.2新增此命令

同组命令

命令动词对象版本变动最近变更
TYPES & OPERATORS类型与运算符23 条↑
CREATE CASTCREATECAST 104 次
定义一种新的类型转换现存
DROP CASTDROPCAST 9.02 次
移除一个类型转换现存
CREATE COLLATIONCREATECOLLATION 163 次
定义一种新排序规则现存
ALTER COLLATIONALTERCOLLATION 143 次
更改排序规则的定义现存
DROP COLLATIONDROPCOLLATION —
删除一个排序规则现存
CREATE CONVERSIONCREATECONVERSION 9.02 次
定义一个新的编码转换现存
ALTER CONVERSIONALTERCONVERSION 145 次
更改一个转换的定义现存
DROP CONVERSIONDROPCONVERSION 8.22 次
移除一个转换现存
CREATE DOMAINCREATEDOMAIN 174 次
定义一个新域现存
ALTER DOMAINALTERDOMAIN 145 次
更改一个域的定义现存
DROP DOMAINDROPDOMAIN 8.22 次
移除一个域现存
CREATE OPERATORCREATEOPERATOR 198 次
定义一个新的操作符现存
ALTER OPERATORALTEROPERATOR 176 次
更改一个操作符的定义现存
DROP OPERATORDROPOPERATOR 148 次
移除一个操作符现存
CREATE OPERATOR CLASSCREATEOPERATOR CLASS 9.15 次
定义一个新的操作符类现存
ALTER OPERATOR CLASSALTEROPERATOR CLASS 145 次
更改一个操作符类的定义现存
DROP OPERATOR CLASSDROPOPERATOR CLASS 8.22 次
移除一个操作符类现存
CREATE OPERATOR FAMILYCREATEOPERATOR FAMILY —
定义一个新的操作符族现存
ALTER OPERATOR FAMILYALTEROPERATOR FAMILY 146 次
更改一个操作符族的定义现存
DROP OPERATOR FAMILYDROPOPERATOR FAMILY —
移除一个操作符族现存
CREATE TYPECREATETYPE 1413 次
定义一种新数据类型现存
ALTER TYPEALTERTYPE 148 次
更改类型的定义现存
DROP TYPEDROPTYPE 8.24 次
移除一个数据类型现存