2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 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 規則起一個在活動規則中按字母順序排在最後的規則名,來確保在第二種情況下,任何期望的 INSTEAD 規則都是設定命令狀態的那個,因為它最後被應用。

提交更正

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