<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # CREATE OPERATOR CLASS ## Name CREATE OPERATOR CLASS?--?定義一個新操作符類 ## Synopsis ``` CREATE OPERATOR CLASS _name_ [ DEFAULT ] FOR TYPE _data_type_ USING _index_method_ [ FAMILY _family_name_ ] AS { 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_ [, ...] ) | STORAGE _storage_type_ } [, ... ] ``` ## 描述 `CREATE OPERATOR CLASS`定義一個新的操作符類。 一個操作符類定義一種特定的數據類型如何與一種索引一起使用。 操作符類聲明特定的操作符可以為這種數據類型以及這種索引方法填充特定的角色或者 "策略"。操作符類還聲明索引方法在為一個索引字段選定該操作符類的時候要 使用的支持過程。所有操作符類使用的函數和操作符都必須在創建操作符類之前定義。 如果給出了模式名字,那么操作符類就在指定的模式中創建。 否則就在當前模式中創建。在同一個模式中的兩個操作符類可以有同樣的名字, 但它們必須用于不同的索引方法。 定義操作符類的用戶將成為其所有者。目前,創造者必須是超級用戶。 做這樣的限制是因為一個有問題的操作符類定義會讓服務器困惑,甚至崩潰。 `CREATE OPERATOR CLASS` 既不檢查這個類定義是否包含所有索引方法需要的操作符以及函數, 也不檢查這些操作符和函數是否形成一個自包含的集合。 定義一個合法的操作符類是用戶的責任。 相關的操作符類可以集合成_操作符族_。 添加一個新的操作符類到一個已經存在的操作符族, 在`CREATE OPERATOR CLASS`中指定`FAMILY`選項。 沒有這個選項,新建的類會放置到與它同名的族中(如果不存在則創建它)。 參考[Section 35.14](#calibre_link-54)獲取更多信息。 ## 參數 `_name_` 將要創建的操作符類的名字(可以用模式修飾)。 `DEFAULT` 表示該操作符類將成為它的數據類型的缺省操作符類。 對于某個數據類型和訪問方式而言,最多有一個操作符類是缺省的。 `_data_type_` 這個操作符類處理的字段的數據類型。 `_index_method_` 這個操作符類處理的索引方法的名字。 `_family_name_` 這個操作符類添加到的現有操作符族的名字。如果沒有指定, 則使用與該操作符類相同名字的操作符族(如果不存在則創建它)。 `_strategy_number_` 一個操作符和這個操作符類關聯的索引方法的策略數。 `_operator_name_` 一個和該操作符類關聯的操作符的名字(可以用模式修飾)。 `_op_type_` 在`OPERATOR`子句中,該操作符的操作數的數據類型, 或者是`NONE`表示左目或者右目操作符。 通常情況下可以省略操作數的數據類型,因為這個時候它們和操作符類的數據類型相同。 在`FUNCTION`子句中,如果函數的操作數數據類型和函數的輸入數據類型 (對于B-tree比較函數和哈希函數)或類的數據類型 (對于B-tree排序支持函數和所有在GiST、SP-GiST和GIN操作符類中的函數)不同, 那么就在該子句中寫上這個函數要支持的操作數類型。這些缺省是正確的, 因此`_op_type_` 不需要在`FUNCTION`子句中指定, 除了B-tree排序支持函數支持交叉數據類型比較的情況。 `_sort_family_name_` 描述與排序操作符相關的排序順序的現有`btree` 操作符族的名字(可以有模式修飾)。 如果既沒有指定`FOR SEARCH`,也沒有指定`FOR ORDER BY`, 那么缺省是`FOR SEARCH`。 `_support_number_` 索引方法對一個與操作符類關聯的函數的支持過程數 `_function_name_` 一個函數的名字(可以有模式修飾),這個函數是索引方法對此操作符類的支持過程。 `_argument_type_` 函數參數的數據類型。 `_storage_type_` 實際存儲在索引里的數據類型。通常它和字段數據類型相同, 但是一些索引方法(目前是GiST和GIN)允許它是不同的。 除非索引方法允許使用一種不同的類型,否則必須省略`STORAGE`子句。 `OPERATOR`、`FUNCTION`和`STORAGE` 子句可以按照任意順序出現。 ## 注意 因為索引機制不在使用函數前檢查其訪問機制, 在操作符類中包含操作符或者函數等價于授權給所有人執行權限。 這對于那些用于操作符類的函數通常不會導致什么問題。 操作符不應該用 SQL 函數定義。一個 SQL 函數很可能是內聯到調用它的查詢里面, 這樣將阻止優化器識別這個查詢是否可以使用索引。 PostgreSQL 8.4之前,`OPERATOR` 子句可以包括`RECHECK`選項。現在不再支持了, 因為一個索引操作符是否是"有損耗的",現在是在運行時動態確定。 這允許高效的處理操作符有或沒有損耗的情況。 ## 例子 下面的例子命令為數據類型`_int4`(`int4`數組) 定義了一個 GiST 索引操作符類。參閱[intarray](#calibre_link-384)模塊獲取完整的例子。 ``` CREATE OPERATOR CLASS gist__int_ops DEFAULT FOR TYPE _int4 USING gist AS OPERATOR 3 &&, OPERATOR 6 = (anyarray, anyarray), OPERATOR 7 @>, OPERATOR 8 <@, OPERATOR 20 @@ (_int4, query_int), FUNCTION 1 g_int_consistent (internal, _int4, int, oid, internal), FUNCTION 2 g_int_union (internal, internal), FUNCTION 3 g_int_compress (internal), FUNCTION 4 g_int_decompress (internal), FUNCTION 5 g_int_penalty (internal, internal, internal), FUNCTION 6 g_int_picksplit (internal, internal), FUNCTION 7 g_int_same (_int4, _int4, internal); ``` ## 兼容性 `CREATE OPERATOR CLASS`是一個PostgreSQL 擴展。在SQL標準中沒有這個語句。 ## 又見 [ALTER OPERATOR CLASS](#calibre_link-57), [DROP OPERATOR CLASS](#calibre_link-58), [CREATE OPERATOR FAMILY](#calibre_link-11), [ALTER OPERATOR FAMILY](#calibre_link-55)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看