| PostgreSQL 8.0.0 中文文件(轉譯自 PostgreSQL 中國 製作的簡體中文版本) | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 33. 規則系統 | Fast Forward | Next |
PostgreSQL 伺服器為它收到的每個命令返回一個命令狀態字串, 比如 INSERT 149592 1。如果沒有涉及規則,那麼這些就很簡單,但是如果查詢是被規則重寫的又會怎樣呢?
規則對命令狀態的影響如下:
如果查詢不存在無條件的 INSTEAD 規則,那麼最初給出的查詢將會被執行, 並且它的命令狀態將像平常一樣返回。(但是請注意如果存在任何條件 INSTEAD 規則, 那麼他們的條件的反條件將會已經加到最初的查詢裡了。這樣可能會減少它處理的行數,如果這樣的話,報告狀態將受影響。)
如果查詢有任何無條件的 INSTEAD 規則,那麼最初的查詢將完全不會被執行。 在這種情況下,伺服器將返回由 伺服器將返回由 INSTEAD 規則(條件的或非條件的)插入的最後一條和源查詢同命令類型的 (INSERT,UPDATE,或者 DELETE)查詢的命令狀態。 如果規則添加的查詢都不符合這些要求,那麼返回的命令狀態顯示源查詢類型而行計數和 OID 字串為零。
(這套系統是在 PostgreSQL 7.3 上建立起來的。在更早的版本裡,存在規則的時候,命令狀態可能顯示得不一樣。)
程序員可以用下面的方法確保任何需要的 INSTEAD 規則都是在上面第二種情況裡設置命令狀態的規則, 就是給這個規則命名為字母順序最後一個活動的規則,這樣它就最後附加。