支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3

39.6. 規則和命令狀態 #

對於接收到的每個命令,PostgreSQL 伺服器都會傳回一個命令狀態字串,例如 INSERT 149592 1。當沒有規則參與時,這非常簡單,但是當查詢被規則重寫時會發生什麼?

規則會以下列方式影響命令狀態

  • 如果查詢沒有無條件的 INSTEAD 規則,那麼最初給定的查詢將被執行,並且它的命令狀態將像往常一樣被傳回。(但請注意,如果存在任何條件的 INSTEAD 規則,則它們的限定條件的否定將被添加到原始查詢中。這可能會減少它處理的行數,如果是這樣,報告的狀態將受到影響。)

  • 如果查詢有任何無條件的 INSTEAD 規則,那麼原始查詢將根本不會被執行。在這種情況下,伺服器將傳回由 INSTEAD 規則(條件或無條件)插入的最後一個查詢的命令狀態,並且該查詢與原始查詢具有相同的命令類型(INSERTUPDATEDELETE)。如果沒有任何規則添加滿足這些要求的查詢,那麼傳回的命令狀態會顯示原始查詢類型,行數和 OID 欄位為零。

程式設計師可以通過在活動規則中給它字母順序上最後一個規則名稱,確保任何想要的 INSTEAD 規則是第二種情況下設置命令狀態的規則,以便它最後被應用。

提交更正

如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表單來報告文件問題。