2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3

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_ROLE | CURRENT_USER | SESSION_USER }

ALTER OPERATOR FAMILY name USING index_method
    SET SCHEMA new_schema

描述

ALTER OPERATOR FAMILY 更改運算子族(operator family)的定義。您可以向族中新增運算子和支援函式,或者從族中移除它們,也可以更改族名或所有者。

當使用 ALTER OPERATOR FAMILY 向族中新增運算子和支援函式時,它們不屬於族中的任何特定運算子類(operator class),而只是“鬆散地”包含在族中。這表明這些運算子和函式與族的概念相容,但對於任何特定索引的正確功能並非必需。(如果有此類必需的運算子和函式,則應將其宣告為運算子類的一部分;參見 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-tree 比較函式和雜湊函式,不需要指定 op_type,因為函式的輸入資料型別總是正確的。對於 B-tree 排序支援函式、B-tree 等價影像函式以及 GiST、SP-GiST 和 GIN 運算子類中的所有函式,則必須指定函式要使用的運算元資料型別。

DROP FUNCTION 子句中,必須指定函式旨在支援的運算元資料型別。

sort_family_name

描述排序運算子相關排序順序的現有 btree 運算子族的名稱(可選模式限定)。

如果未指定 FOR SEARCHFOR ORDER BY,則預設值為 FOR SEARCH

support_number

與運算子族關聯的函式的索引方法的支援函式編號。

function_name

運算子族索引方法支援函式的名稱(可選模式限定)。如果未指定引數列表,則名稱在其模式中必須是唯一的。

argument_type

函式的引數資料型別。

new_name

運算子族的新名稱。

new_owner

運算子族的新所有者。

new_schema

運算子族的新模式。

OPERATORFUNCTION 子句可以按任何順序出現。

註釋

請注意,DROP 語法僅透過策略或支援編號和輸入資料型別指定運算子族中的“槽”。佔位符運算子或函式的名稱未提及。此外,對於 DROP FUNCTION,要指定的型別是函式旨在支援的輸入資料型別;對於 GiST、SP-GiST 和 GIN 索引,這可能與函式的實際輸入引數型別無關。

由於索引機制在呼叫函式之前不檢查其訪問許可權,因此將函式或運算子包含在運算子族中相當於授予其公共執行許可權。對於運算子族中可能用到的函式,這通常不是問題。

運算子不應由 SQL 函式定義。SQL 函式可能會內聯到呼叫查詢中,這將阻止最佳化器識別查詢是否匹配索引。

示例

以下示例命令向已包含 int4int2 資料型別的 B-tree 運算子類的運算子族中新增跨資料型別的運算子和支援函式。

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

相容性

SQL 標準中沒有 ALTER OPERATOR FAMILY 語句。

提交更正

如果您在文件中看到任何不正確的內容、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用 此表格 報告文件問題。