麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > PostgreSQL > 正文

PostgreSQL7.0手冊-用戶手冊-19. SQL命令-CREATE OPERATOR

2019-09-08 23:32:59
字體:
來源:轉載
供稿:網友
CREATE OPERATOR
名稱
CREATE OPERATOR ― 定義一個新的用戶操作符 

語法
CREATE OPERATOR name ( PROCEDURE = func_name
     [, LEFTARG = type1 ] [, RIGHTARG = type2 ]
     [, COMMUTATOR = com_op ] [, NEGATOR = neg_op ]
     [, RESTRICT = res_proc ] [, JOIN = join_proc ]
     [, HASHES ] [, SORT1 = left_sort_op ] [, SORT2 = right_sort_op ] )
輸入
name 
定義的操作符名.可用的字符見下文。 
func_name 
用于實現該操作符的函數。 
type1 
如果存在的話,操作符左手邊的參數類型.如果是右目操作符,這個參數可以省略。 
  
type2 
如果存在的話,操作符右手邊的參數類型.如果是左目操作符,這個參數可以省略?!?
  
com_op 
對應的換向(commutative)操作符?!?
neg_op 
對應的負操作符。 
res_proc 
此操作符約束選擇性評估函數。 
join_proc 
此操作符的聯合選擇性評估函數?!?
HASHES 
表明此操作符支持哈希(散列)聯合算法。 
left_sort_op 
如果此操作符支持融合聯合(join),此操作符的左邊數據的排序操作符?!?
right_sort_op 
如果此操作符支持融合聯合(join),此操作符的右邊數據的排序操作符?!?
輸出
CREATE 
成功創建操作符后的返回信息. 

描述
CREATE OPERATOR 定義一個新的操作符, name?。x該操作符的用戶成為其所有者. 
操作符 name 是一個最多 NAMEDATALEN-1 長的(缺省委 31 個)下列字符組成的字串. 

+ - * / < > = ~ ! @ # % ^ & | ` ? $ : 

你選擇名字的時候有幾個限制: 

"$" 和 ":" 不能定義為單字符操作符,盡管它們可以是一個多字符操作符的名稱的一部分. 
"--" 和 "/*" 不能在操作符名字的任何地方出現,因為它們會被認為是一個注釋的開始. 

一個多字符的操作符名字不能以 "+" 或 "-" 結尾,除非該名字還包含至少下面字符之一: 

~ ! @ # % ^ & | ` ? $ : 

例如,@- 是一個允許的操作符名,但 *- 不是.這個限制允許 Postgres 分析 SQL-有問題的查詢而不要求在符號之間有空白.

請注意:當使用非 SQL-標準操作符名時,你通常將需要用空白把聯接的操作符分離開以避免含混.例如,如果你定義了一個左目操作符,名為 "@",你不能寫 X*@Y;你必須些成 X* @Y 以保證 Postgres 把它讀做兩個操作符而不是一個.
操作符 "!=" 在輸入時映射成 "<>" , 因為這兩個名稱總是相等的. 
至少需要定義一個 LEFTARG 或 RIGHTARG?。畬τ陔p目操作符來說,兩者都需要定義.對右目操作符來說,只需要定義 LEFTARG,而對于左目操作符來說,只需要定義 RIGHTARG. 

同樣, func_name 過程必須已經用 CREATE FUNCTION 定義過,而且必須定義為接受正確數量的參數(一個或是兩個). 

換向操作符用于令 Postgres 可以按它的意愿轉換操作符的方向.例如,操作符面積小于,<<<,就有一個轉換操作符:面積大于操作符, >>>.因此,查詢優化器可以自由的將下面查詢從: 

box '((0,0),(1,1))'  >>> MYBOXES.description
轉換到 
MYBOXES.description <<< box '((0,0),(1,1))'
這就允許執行代碼總是使用后面的形式而某種程度上簡化了查詢優化器. 
類似地,如果存在負號操作符則應該聲明。假設一個操作符,面積相等, ===,存在,同樣有一個面積不等操作符,!==.負號操作符允許查詢優化器將 

NOT MYBOXES.description === box '((0,0),(1,1))'
簡化成 
MYBOXES.description !== box '((0,0),(1,1))'
如果提供了一個轉換器操作符名稱,Postgres 將在目錄中查找它.如果找到,而且其本身沒有一個轉換器,那么轉換器表將被更新,以當前(最新)操作符作為它的轉換器.這一點一樣適用于負號操作符.這就允許定義兩個互為轉換器或負號符的操作符.第一個操作符應該定義為沒有轉換器或負號符(as appropriate).當定義第二個操作符時,將第一個符號作為轉換器或負號符.第一個將因上述的副作用一樣被更新(而獲得轉換器或負號符).(對于 Postgres 6.5,把兩個操作符指向對方同樣也行。) 
HASHES,SORT1 和 SORT2 選項將為查詢優化器進行聯合查詢時提供支持.Postgres 能夠總是用語義替換  [WONG76] 來計算一個聯合(也就是說,處理這樣的子句,該子句有兩個記錄變量,這兩個變量被一個操作符分開,最后這個子句返回一個布爾量).另外, Postgres 準備在行[SHAP86](?)實現一個哈希-聯合算法(hash-join algorithm);但是,我們必須知道這個策略是否可行.目前的哈希-聯合算法只是對代表相等測試的操作符有效;而且,數據類型的相等必須意味著類型的表現是按位相等的。(例如,一個包含未用的位的數據類型,這些位對相等測試沒有影響,但卻不能用于哈希聯合。)HASHES 標記告訴優化器,對這個操作符可以安全地使用哈希聯合?!?

類似的,兩目排序操作符告訴查詢優化器一個融合-排序(merge-sort)是否是一個可用的聯合策略,并且告訴優化器使用哪個操作符來對這兩個操作數表排序.排序操作符應該只提供給相等操作符,并且它們應該對應用于對應的左邊和右邊數據類型的小于操作符?!?

如果發現其他聯合策略可用, Postgres 將更改優化器和運行時系統以利用這些策略,并且在定義一個操作符時將需要更多的聲明.幸運的是,研究團隊不經常發明新的聯合策略,而且增加用戶定義聯合策略的方法看來與其實現的復雜性相比是不值得的?!?

RESTRICT 和 JOIN 選項幫助優化器計算結果的尺寸大?。绻裣旅娴恼Z句: 

MYBOXES.description <<< box '((0,0),(1,1))'
在判斷條件中出現,那么 Postgres 將不得不估計 MYBOXES 中滿足該子句的記錄數量的范圍的大小.函數 res_proc 必需是一個注冊過的函數(也就是說它已經用 CREATE FUNCTION 定義過了),它接受一個正確數據的數據類型作為參數,返回一個浮點數.查詢優化器只是簡單的調用這個函數,將參數 ((0,0),(1,1))  傳入并且把結果乘以關系(表)尺寸以獲得所需要的記錄的數值?!?
類似的,當操作符的操作數都包含記錄變量時,優化器必須計算聯合結果的尺寸.函數 join_proc 將返回另一個浮點數,這個數就是將兩個表相關的記錄相乘,計算出預期結果的尺寸. 

函數 

my_procedure_1 (MYBOXES.description, box '((0,0),(1,1))')
和操作符 
MYBOXES.description === box '((0,0),(1,1))'
之間的區別是 Postgres 試圖優化操作符并且可以決定使用索引來縮小相關操作符的搜索區間.但是,對函數將不會有任何優化的動作,而且是強制執行.最后,函數可有任意個參數,而操作符限于一個或兩個. 
注意
請參閱PostgreSQL 用戶手冊 中操作符章節獲取更多信息.請使用 DROP OPERATOR 從數據庫中刪除用戶定義操作符.
用法
下面命令定義一個新操作符,面積相等,用于 BOX 數據類型. 
CREATE OPERATOR === (
   LEFTARG = box,
   RIGHTARG = box,
   PROCEDURE = area_equal_procedure,
   COMMUTATOR = ===,
   NEGATOR = !==,
   RESTRICT = area_restriction_procedure,
   JOIN = area_join_procedure,
   HASHES,
   SORT1 = <<<,
   SORT2 = <<<
);
兼容性
SQL92
CREATE OPERATOR 是 Postgres 擴展.在 SQL92 中沒有 CREATE OPERATOR 語句.
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 一边吃奶一边摸下娇喘 | 黄色高清视频网站 | 国产精品成人免费一区久久羞羞 | 在线看日本 | 久久国产在线观看 | 草草久久久| 免费国产一区 | 色99久久 | 久草高清视频 | 免费一级毛片在线播放视频 | 综合97 | 国产美女爽到喷白浆的 | 极品美女一级毛片 | 欧美一级毛片美99毛片 | av不卡免费在线 | 天天色图片 | 成人福利视频在线观看 | 国产污污视频 | 日本在线播放一区二区三区 | 国产精品999在线观看 | 天天色宗合 | 在线无码 | 国产精品午夜一区 | 国产一国产精品一级毛片 | 亚洲一区二区免费 | 在线91视频 | 国产一级一国产一级毛片 | 国产精品爱久久久久久久 | 国产女做a爱免费视频 | 日日草天天干 | 蜜桃传媒视频麻豆第一区免费观看 | www.48xx.com| 特级黄色小说 | 久久久久久久网站 | 久久久久av69精品 | 蜜桃av网| 九九午夜| 欧美日韩一 | 欧美成人国产va精品日本一级 | 久久综合精品视频 | 国产三级在线视频观看 |