Man page - notify(7)
Manual
NOTIFY
NAMESYNOPSIS
DESCRIPTION 描 述
PARAMETERS 引 數
EXAMPLES 例 子
COMPATIBILITY 相 容 性
SEE ALSO 參 見
譯 者
跋
NAME
NOTIFY - 生 成 一 個 通 知
SYNOPSIS
NOTIFY name
DESCRIPTION 描 述
NOTIFY 命 令 向 當 前 資 料 庫 中 所 有 執 行 過 LISTEN name, 正 在 監 聽 特 定 通 知 條 件 的 前 端 應 用 傳 送 一 個 通 知 事 件 。
傳 遞 給 前 端 的 通 知 事 件 包 括 通 知 條 件 名 和 發 出 通 知 的 後 端 程 序 PID。 資 料 庫 設 計 者 有 責 任 定 義 用 於 某 個 資 料 庫 的 條 件 名 和 每 個 通 知 條 件 的 含 義 。
通 常 , 通 知 條 件 名 與 資 料 庫 裡 的 表 的 名 字 相 同 , 通 知 時 間 實 際 上 意 味 著 "我 修 改 了 此 資 料 庫 , 請 看 一 眼 有 什 麼 新 東 西 "。 NOTIFY 和 LISTEN 命 令 並 不 強 制 這 種 聯 絡 。 例 如 , 資 料 庫 設 計 者 可 以 使 用 幾 個 不 同 的 條 件 名 來 標 誌 一 個 表 的 幾 種 不 同 改 變 。
NOTIFY 為 訪 問 同 一 個 PostgreSQL 資 料 庫 的 一 組 程 序 提 供 了 一 種 簡 單 的 訊 號 形 式 或 程 序 間 通 訊 機 制 。 更 高 階 的 機 制 ( 除 了 一 個 簡 單 的 通 知 名 以 外 ) 可 以 透 過 使 用 資 料 庫 中 的 表 從 通 知 者 傳 遞 資 料 到 被 通 知 者 。
當 NOTIFY用 於 通 知 某 一 特 定 表 修 改 的 動 作 的 發 生 , 一 個 實 用 的 程 式 設 計 技 巧 是 將 NOTIFY 放 在 一 個 由 表 更 新 觸 發 的 規 則 裡 。 用 這 種 方 法 , 通 知 將 在 表 更 新 的 時 候 自 動 觸 發 , 而 且 應 用 程 式 設 計 師 不 會 碰 巧 忘 記 處 理 它 。
NOTIFY 和 SQL 事 務 用 某 種 重 要 的 方 法 進 行 交 換 。 首 先 , 如 果 NOTIFY 在 事 務 內 部 執 行 , 通 知 事 件 直 到 事 務 提 交 才 會 送 出 。 這 麼 做 是 有 道 理 的 , 因 為 如 果 事 務 退 出 了 , 那 麼 在 它 裡 面 的 所 有 命 令 都 沒 有 效 果 - 包 括 NOTIFY。 但 如 果 有 人 希 望 通 知 事 件 立 即 傳 送 , 這 就 不 太 好 了 。 其 次 , 當 一 個 正 在 監 聽 的 會 話 在 一 次 事 務 內 收 到 一 個 通 知 訊 號 , 直 到 本 次 事 務 完 成 ( 提 交 或 退 出 ) 之 前 , 該 通 知 事 件 將 不 被 送 到 與 之 相 連 的 客 戶 端 。 同 樣 , 如 果 一 個 通 知 在 事 務 內 部 發 送 出 去 了 , 而 該 事 務 稍 後 又 退 出 了 , 我 們 就 希 望 通 知 可 以 在 某 種 程 度 上 被 撤 消 - - 但 通 知 一 旦 傳 送 出 去 , 伺 服 器 便 不 能 從 客 戶 端 "收 回 "通 知 。 所 以 通 知 時 間 只 是 在 事 務 之 間 傳 遞 。 這 一 點 就 要 求 使 用 NOTIFY 作 為 即 時 訊 號 的 應 用 應 該 確 保 他 們 的 事 務 儘 可 能 短 。
NOTIFY 在 一 方 面 的 行 為 象 Unix 的 訊 號 : 如 果 同 一 條 件 名 在 短 時 間 內 發 出 了 多 條 訊 號 , 接 收 者 幾 次 執 行 NOTIFY 可 能 只 回 收 到 一 條 通 知 資 訊 。 所 以 依 賴 於 收 到 的 通 知 條 數 的 方 法 是 很 不 可 靠 的 。 因 而 , 使 用 NOTIFY喚 醒 需 要 關 注 某 事 的 應 用 , 同 時 還 要 使 用 資 料 庫 物 件 ( 如 序 列 號 ) 來 跟 蹤 事 件 發 生 了 幾 次 。
客 戶 端 經 常 會 自 己 傳 送 與 正 在 監 聽 的 通 知 名 一 樣 的 NOTIFY。 這 時 它 ( 客 戶 端 ) 也 和 其 他 正 在 監 聽 的 會 話 一 樣 收 到 一 個 通 知 事 件 。 這 樣 可 能 導 致 一 些 無 用 的 工 作 ( 與 應 用 邏 輯 有 關 ) - - 例 如 , 對 客 戶 端 剛 寫 過 的 表 又 進 行 一 次 讀 操 作 以 發 現 是 否 有 更 新 。 我 們 可 以 透 過 檢 查 伺 服 器 程 序 的 PID( 在 通 知 事 件 中 提 供 ) 是 否 與 自 己 的 後 端 的 PID一 致 ( 從 libpq 中 取 得 ) 。 當 他 們 一 樣 時 , 說 明 這 是 其 自 身 回 彈 的 資 訊 , 可 以 忽 略 。 ( 不 管 前 面 章 節 是 如 何 講 的 , 這 是 一 個 安 全 的 技 巧 。 PostgreSQL 保 持 自 身 的 通 知 和 其 他 到 來 的 通 知 區 分 開 。 所 以 你 遮 蔽 了 自 己 的 通 知 後 不 會 略 過 外 部 的 通 知 。 )
PARAMETERS 引 數
|
name |
生 成 訊 號 ( 通 知 ) 的 通 知 條 件 ( 任 何 識 別 符 號 ) 。
EXAMPLES 例 子
在 psql 裡 配 置 和 執 行 一 個 監 聽 /通 知 對 :
LISTEN virtual;
NOTIFY virtual;
Asynchronous notification "virtual" received from
server process with PID 8448.
COMPATIBILITY 相 容 性
在 SQL 標 準 裡 沒 有 NOTIFY 語 句 。
SEE ALSO 參 見
LISTEN [ listen (7)], UNLISTEN [ unlisten (l)]
譯 者
Postgresql 中 文 網 站 何 偉 平 <laser@pgsqldb.org>
跋
本
頁 面 中 文 版 由
中 文 man 手 冊 頁 計
劃 提 供 。
中 文 man 手 冊 頁 計
劃 :
https://github.com/man-pages-zh/manpages-zh