Man page - create_operator(7)

Manual

CREATE OPERATOR

NAME
SYNOPSIS
DESCRIPTION 描 述
PARAMETERS 引 數
NOTES 注 意
EXAMPLES 例 子
COMPATIBILITY 相 容 性
譯 者


NAME

CREATE OPERATOR - 定 義 一 個 新 的 運 算 子

SYNOPSIS

CREATE OPERATOR name (
PROCEDURE = funcname
[, LEFTARG = lefttype ] [, RIGHTARG = righttype ]
[, COMMUTATOR = com_op ] [, NEGATOR = neg_op ]
[, RESTRICT = res_proc ] [, JOIN = join_proc ]
[, HASHES ] [, MERGES ]
[, SORT1 = left_sort_op ] [, SORT2 = right_sort_op ]
[, LTCMP = less_than_op ] [, GTCMP = greater_than_op ]
)

DESCRIPTION 描 述

CREATE OPERATOR 定 義 一 個 新 的 運 算 子 , name。 定 義 該 運 算 子 的 使 用 者 成 為 其 所 有 者 。 如 果 給 出 了 一 個 模 式 名 , 那 麼 該 運 算 子 將 在 指 定 的 模 式 中 建 立 。 否 則 它 會 在 當 前 模 式 中 建 立 。

運 算 子 name 是 一 個 最 多 NAMEDATALEN-1 長 的 ( 預 設 為 63 個 ) 下 列 字 元 組 成 的 字 串 :

+ - * / < > = ˜ ! @ # % ˆ & | ‘ ?

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

-- 和 /* 不 能 在 運 算 子 名 字 的 任 何 地 方 出 現 , 因 為 它 們 會 被 認 為 是 一 個 註 釋 的 開 始 。

一 個 多 字 元 的 運 算 子 名 字 不 能 以 + 或 - 結 尾 , 除 非 該 名 字 還 包 含 至 少 下 面 字 元 之 一 :

˜ ! @ # % ˆ & | ‘ ?

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

運 算 子 != 在 輸 入 時 對 映 成 <>, 因 此 這 兩 個 名 稱 總 是 相 等 的 。

至 少 需 要 定 義 一 個 LEFTARG或 RIGHTARG。 對 於 雙 目 運 算 子 來 說 , 兩 者 都 需 要 定 義 。 對 右 目 運 算 子 來 說 , 只 需 要 定 義 LEFTARG, 而 對 於 左 目 運 算 子 來 說 , 只 需 要 定 義 RIGHTARG。

同 樣 , funcname 過 程 必 須 已 經 用 CREATE FUNCTION 定 義 過 , 而 且 必 須 定 義 為 接 受 正 確 數 量 的 指 定 型 別 引 數 ( 一 個 或 是 兩 個 ) 。

其 它 子 句 宣 告 可 選 的 運 算 子 最 佳 化 子 句 。 他 們 的 含 義 在 ‘‘User-Defined Operators’’ 裡 定 義 。

PARAMETERS 引 數

name

要 定 義 的 運 算 子 名 字 。 可 用 的 字 元 見 上 文 。 其 名 字 可 以 用 模 式 修 飾 , 比 如 CREATE OPERATOR myschema.+ (...)。 如 果 沒 有 模 式 , 則 在 當 前 模 式 中 建 立 運 算 子 。 同 一 個 模 式 中 的 兩 個 運 算 子 可 以 有 一 樣 的 名 字 , 只 要 他 們 操 作 不 同 的 資 料 型 別 。 這 叫 做 過 載 。

funcname

用 於 實 現 該 運 算 子 的 函 式 。

lefttype

如 果 存 在 的 話 , 運 算 子 左 手 邊 的 引 數 型 別 。 如 果 是 左 目 運 算 子 , 這 個 引 數 可 以 省 略 。

righttype

如 果 存 在 的 話 , 運 算 子 右 手 邊 的 引 數 型 別 。 如 果 是 右 目 運 算 子 , 這 個 引 數 可 以 省 略 。

com_op

該 運 算 子 對 應 的 交 換 ( commutator) 運 算 子 。

neg_op

對 應 的 負 運 算 子 。

res_proc

此 運 算 子 約 束 選 擇 性 計 算 函 式 。

join_proc

此 運 算 子 連 線 選 擇 性 計 算 函 式 。

HASHES

表 明 此 運 算 子 支 援 雜 湊 ( 雜 湊 ) 連 線 。

MERGES

表 明 此 運 算 子 可 以 支 援 一 個 融 合 連 線 。

left_sort_op

如 果 此 運 算 子 支 援 融 合 連 線 ( join) , 此 運 算 子 的 左 手 邊 資 料 的 排 序 運 算 子 。

right_sort_op

如 果 此 運 算 子 支 援 融 合 連 線 ( join) , 此 運 算 子 的 右 手 邊 資 料 的 排 序 運 算 子 。

less_than_op

如 果 這 個 運 算 子 可 以 支 援 融 合 連 線 , 那 麼 這 就 是 比 較 這 個 運 算 子 的 輸 入 資 料 型 別 的 小 於 運 算 子 。

greater_than_op

如 果 這 個 運 算 子 不 支 援 融 合 連 線 , 那 麼 這 就 是 比 較 輸 入 這 個 運 算 子 的 資 料 型 別 的 大 於 運 算 子 。

要 在 com_op 或 者 其 它 可 選 引 數 裡 給 出 一 個 模 式 修 飾 的 運 算 子 名 , 使 用 OPERATOR() 語 法 , 比 如

COMMUTATOR = OPERATOR(myschema.===) ,

NOTES 注 意

請 參 閱 ‘‘User-Defined Operators’’ 中 運 算 子 章 節 獲 取 更 多 資 訊 。

請 使 用 DROP OPERATOR 從 資 料 庫 中 刪 除 使 用 者 定 義 運 算 子 。

EXAMPLES 例 子

下 面 命 令 定 義 一 個 新 運 算 子 , 面 積 相 等 , 用 於 box 資 料 型 別 。

CREATE OPERATOR === (
LEFTARG = box,
RIGHTARG = box,
PROCEDURE = area_equal_procedure,
COMMUTATOR = ===,
NEGATOR = !==,
RESTRICT = area_restriction_procedure,
JOIN = area_join_procedure,
HASHES,
SORT1 = <<<,
SORT2 = <<<
-- 因 為 給 出 了 排 序 運 算 子 , 索 引 隱 含 地 有 MERGES。
-- LTCMP 和 GTCMP 分 別 假 設 是 < 和 >
);

COMPATIBILITY 相 容 性

CREATE OPERATOR 是 PostgreSQL 擴 充 套 件 。 在 SQL標 準 中 沒 有 CREATE OPERATOR 語 句 。

譯 者

Postgresql 中 文 網 站 何 偉 平 <laser@pgsqldb.org>

本 頁 面 中 文 版 由 中 文 man 手 冊 頁 計 劃 提 供 。
中 文 man 手 冊 頁 計 劃 : https://github.com/man-pages-zh/manpages-zh