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

首頁 > 數(shù)據(jù)庫 > PostgreSQL > 正文

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

2019-09-08 23:33:42
字體:
供稿:網(wǎng)友
NOTIFY
名稱
NOTIFY ― 通知所有正在監(jiān)聽某個通知條件的前端和后端 

語法
NOTIFY name
輸入
notifyname 
生成信號(通知)的通知條件. 

輸出
NOTIFY 
確認(rèn)通知命令已經(jīng)執(zhí)行了. 
Notify events 
事件發(fā)送給在監(jiān)聽的前端;前端是否響應(yīng)或怎樣響應(yīng)取決于它自身的程序. 
描述
NOTIFY 命令向當(dāng)前數(shù)據(jù)庫中所有執(zhí)行過 LISTEN notifyname ,正在監(jiān)聽特定通知條件的前端應(yīng)用發(fā)送一個通知事件. 
傳遞給前端的通知事件包括通知條件名和發(fā)出通知的后端進(jìn)程 PID.?dāng)?shù)據(jù)庫設(shè)計者有責(zé)任定義用于某個數(shù)據(jù)庫的條件名和每個通知條件的含義. 

通常,通知條件名與數(shù)據(jù)庫里的表的名字相同,通知時間實(shí)際上意味著"我修改了此數(shù)據(jù)庫,請看一眼有什么新東西".但 NOTIFY 和 LISTEN 命令并不強(qiáng)制這種聯(lián)系.例如,數(shù)據(jù)庫設(shè)計者可以使用幾個不同的條件名來標(biāo)志一個表的幾種不同改變. 

NOTIFY 為訪問 Postgres 數(shù)據(jù)庫的一組進(jìn)程提供了一種簡單的信號形式或IPC(內(nèi)部進(jìn)程通訊)機(jī)制.更高級的機(jī)制可以通過使用數(shù)據(jù)庫中的表從通知者傳遞數(shù)據(jù)到被通知者. 

當(dāng) NOTIFY 用于通知某一特定表修改的動作的發(fā)生,一個實(shí)用的編程技巧是將 NOTIFY 放在一個由表更新觸發(fā)的規(guī)則里.用這種方法,通知將在表更新的時候自動觸發(fā),而且應(yīng)用程序員不會碰巧忘記處理它. 

NOTIFY 和 SQL 事務(wù)用某種重要的方法進(jìn)行交換.首先,如果 NOTIFY 在事務(wù)內(nèi)部執(zhí)行,通知事件直到事務(wù)提交才會送出.這么做是有道理的,因?yàn)槿绻聞?wù)退出了,我們將希望在它里面的所有命令都沒有效果- 包括 NOTIFY.但如果有人希望通知事件及時發(fā)送,這就不太好了.其次,當(dāng)一個正在監(jiān)聽的后端在一次事務(wù)內(nèi)收到一個通知信號,直到本次事務(wù)完成(提交或退出)之前,該通知事件將不被送到與之相連的前端。同樣,如果一個通知在事務(wù)內(nèi)部發(fā)送出去了,而該事務(wù)稍后又退出了,我們就希望通知可以在某種程度上被撤消--但通知一旦發(fā)送出去,后端便不能從前端"收回" 通知.所以通知時間只是在事務(wù)之間傳遞.這一點(diǎn)就要求使用 NOTIFY 作為實(shí)時信號的應(yīng)用應(yīng)該確保他們的事務(wù)盡可能短. 

NOTIFY 在某方面表現(xiàn)得象 Unix 的信號:如果同一條件名在短時間內(nèi)發(fā)出了多條信號,接收者幾次執(zhí)行 NOTIFY 可能只回收到一條通知信息.所以依賴于收到的通知條數(shù)的方法是很不可靠的.因而,使用 NOTIFY 喚醒需要關(guān)注某事的應(yīng)用,同時還要使用數(shù)據(jù)庫對象(如序列號)來跟蹤事件發(fā)生了幾次. 

前端經(jīng)常會自己發(fā)送與正在監(jiān)聽的通知名一樣的 NOTIFY .這時它(前端)也和其他正在監(jiān)聽的前端一樣收到一個通知事件.這樣可能導(dǎo)致一些無用的工作(與應(yīng)用邏輯有關(guān))--例如,對前端剛寫過的表又進(jìn)行一次讀操作以發(fā)現(xiàn)是否有更新.在Postgres 6.4 或更新的版本中,我們可以通過檢查后端進(jìn)程的 PID (在通知事件中提供)是否與自己的后端的 PID 一致(從libpq中取得).當(dāng)他們一樣時,說明這是其自身回彈的信息,可以忽略.(不管前面章節(jié)是如何講的,這是一個安全的技巧.Postgres 保持自身的通知和其他到來的通知區(qū)分開.所以你屏蔽了自己的通知后不會略過外部的通知.) 

注意
name 可以是作為名稱的任何字串;它不需要與任何實(shí)際的表的名稱對應(yīng).如果用雙引號將 name 括起,它甚至可以不是語法上有效的名稱,可以是任何小于31字符長的字串. 
在以前的 Postgres 版本,name 如果和不和任何現(xiàn)存的表名對應(yīng)時必須用雙引號引起來,即使它在語法上是正確的也這樣。現(xiàn)在不需要這樣做了。 

Postgres 早于 6.4 的版本,在通知信息送出的后端 PID 總是前端自己的后端的 PID.所以在那些早期版本里,不可能將自身的通知信息和別的客戶端的通知信息區(qū)分開. 

用法
在psql 里配置和執(zhí)行一個監(jiān)聽/通知對: 
=> LISTEN virtual;
=> NOTIFY virtual;
Asynchronous NOTIFY 'virtual' from backend with pid '8448' received.
兼容性
SQL92
在 SQL92 里沒有 NOTIFY 語句.
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 成年人黄色片视频 | 蜜桃精品视频在线观看 | 日韩在线毛片 | 免费午夜视频在线观看 | 黄色片免费在线播放 | 在线成人看片 | 国产一级淫片在线观看 | 日韩av在线资源 | 欧美一级电影网站 | 色爱99| 国产精品免费视频观看 | 久久新网址 | 黄色大片www| 91麻豆精品国产91久久久更新资源速度超快 | 最新欧美精品一区二区三区 | 久久久午夜电影 | 九九热视频这里只有精品 | 久久精品一二三区白丝高潮 | 黄色片网站在线播放 | aa国产视频一区二区 | 销魂美女一区二区 | 欧美a视频 | 蜜桃传媒视频麻豆第一区免费观看 | 成人男男视频拍拍拍在线观看 | 可以看逼的视频 | 一区二区精品视频在线观看 | 91一区二区在线观看 | 圆产精品久久久久久久久久久 | 成人午夜激情网 | 一区二区三区国产视频 | 欧美三级欧美成人高清www | 一级色毛片 | 日本精品黄色 | 国产papa | 成人国产精品一区二区毛片在线 | 久久亚洲精品国产一区 | 黄网站免费观看视频 | 欧美中文字幕一区二区 | 性少妇videosexfreexxx片 | 毛片在线免费 | 黄色片网站在线播放 |