W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
CREATE OPERATOR — 定義一個新的操作符
CREATE OPERATOR name ( {FUNCTION|PROCEDURE} =
function_name
[, LEFTARG = left_type ] [, RIGHTARG = right_type ]
[, COMMUTATOR = com_op ] [, NEGATOR = neg_op ]
[, RESTRICT = res_proc ] [, JOIN = join_proc ]
[, HASHES ] [, MERGES ])
CREATE OPERATOR
定義一個新的操作符 name
。定義操作符 的用戶會成為該操作符的擁有者。如果給出一個模式名,該操作符將被創(chuàng)建 在指定的模式中。否則它會被創(chuàng)建在當(dāng)前模式中。
操作符名稱是最多NAMEDATALEN
-1(默認為 63) 個字符的序列,這些字符可以是:
+ - * / < > = ~ ! @ # % ^ & | ` ?
對名稱的選擇有一些限制:
--
and /*
不能出現(xiàn)在 操作符名稱中,因為它們會被當(dāng)做一段注釋的開始。
多字符操作符名稱不能以+
或者-
結(jié)束,除非該名稱也包含至少一個下列字符:
~ ! @ # % ^ & | ` ?
例如,@-
是一個被允許的操作符名稱,而 *-
不是。這種限制允許 PostgreSQL解析 SQL 兼容的命令 而無需記號之間的空格。
將=>
用作一個操作符名稱已經(jīng)不被推薦。在未來的發(fā)行中 可能會被禁用。
在輸入時!=
會被映射為<>
, 因此這兩個名字總是等效的。
必須至少定義LEFTARG
和RIGHTARG
中的一個。 對于二元操作符,兩者都必須被定義。對于右一元操作符,只應(yīng)該定義 LEFTARG
,而對于左一元操作符只應(yīng)該定義 RIGHTARG
。
右一元運算符(也稱為后綴)已棄用,并將在PostgreSQL版本14中刪除。
function_name
函數(shù) 必須在之前已經(jīng)用CREATE FUNCTION
定義好, 并且必須被定義為接受正確數(shù)量的指定類型的參數(shù)。
在CREATE OPERATOR
的語法中,關(guān)鍵詞FUNCTION
和PROCEDURE
是等效的,但不管哪種情況下被引用的函數(shù)都必須是一個函數(shù)而不是過程。這里對關(guān)鍵詞PROCEDURE
的是用是有歷史原因的,現(xiàn)在已經(jīng)被廢棄。
其他子句指定可選的操作符優(yōu)化子句。它們的含義在 第 37.15 節(jié)中有詳細描述。
要創(chuàng)建一個操作符,必須具有參數(shù)類型和返回類型上的USAGE
特權(quán),以及底層函數(shù)上的EXECUTE
特權(quán)。如果指定了一個 交換子或者求反器操作符,必須擁有這些操作符。
name
要定義的操作符的名稱。允許使用的字符請見上文。名稱可以被模式 限定,例如CREATE OPERATOR myschema.+ (...)
。如果 沒有被模式限定,該操作符將被創(chuàng)建在當(dāng)前模式中。如果兩個同一模式 中的操作符在不同的數(shù)據(jù)類型上操作,它們可以具有相同的名稱。這 被稱為重載。
function_name
用來實現(xiàn)這個操作符的函數(shù)。
left_type
這個操作符的左操作數(shù)(如果有)的數(shù)據(jù)類型。忽略這個選項 可以表示一個左一元操作符。
right_type
這個操作符的右操作數(shù)(如果有)的數(shù)據(jù)類型。忽略這個選項 可以表示一個右一元操作符。
com_op
這個操作符的交換子。
neg_op
這個操作符的求反器。
res_proc
用于這個操作符的限制選擇度估計函數(shù)。
join_proc
用于這個操作符的連接選擇度估算函數(shù)。
HASHES
表示這個操作符可以支持哈希連接。
MERGES
表示這個操作符可以支持歸并連接。
要在com_op
或者其他可選參數(shù)中給出一個模式限定的操作符名稱, 請使用OPERATOR()
語法,例如:
COMMUTATOR = OPERATOR(myschema.===) ,
進一步的信息可參考第 37.14 節(jié)。
無法在CREATE OPERATOR
中指定一個操作符的 詞法優(yōu)先級,因為解析器的優(yōu)先級行為是硬寫在代碼中的。詳見 第 4.1.6 節(jié)。
廢棄的選項SORT1
、SORT2
、 LTCMP
以及GTCMP
以前被用來指定與支持 歸并連接的操作符相關(guān)的排序操作符的名稱?,F(xiàn)在不再需要它們了,因為 相關(guān)操作符的信息可以在 B-樹的操作符族中找到。如果給出了這些選項 之一,它會被忽略(除非是為了隱式設(shè)置MERGES
為真)。
使用DROP OPERATOR從數(shù)據(jù)庫中刪除用戶定義的操作符。 使用ALTER OPERATOR修改數(shù)據(jù)庫中的操作符。
下面的命令為數(shù)據(jù)類型box
定義了一種新的操作符--面積相等:
CREATE OPERATOR === (
LEFTARG = box,
RIGHTARG = box,
FUNCTION = area_equal_function,
COMMUTATOR = ===,
NEGATOR = !==,
RESTRICT = area_restriction_function,
JOIN = area_join_function,
HASHES, MERGES
);
CREATE OPERATOR
是一種 PostgreSQL擴展。在 SQL 標(biāo)準(zhǔn)中沒有用戶定義操作符的規(guī)定。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: