oracular (7) notify.7.gz

Provided by: manpages-zh_1.6.4.0-1_all bug

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