對於接收到的每個命令,PostgreSQL 伺服器都會返回一個命令狀態字串,例如 INSERT 149592 1
。當沒有規則涉及時,這很簡單,但當查詢被規則重寫時會發生什麼?
規則會以如下方式影響命令狀態:
如果沒有對查詢的無條件 INSTEAD
規則,那麼原始查詢將被執行,並照常返回其命令狀態。(但請注意,如果有任何有條件的 INSTEAD
規則,它們的限定條件的否定將被新增到原始查詢中。這可能會減少它處理的行數,如果發生這種情況,報告的狀態將受到影響。)
如果對查詢有任何無條件的 INSTEAD
規則,那麼原始查詢根本不會被執行。在這種情況下,伺服器將返回由 INSTEAD
規則(有條件或無條件)插入的最後一個查詢的命令狀態,並且該查詢的命令型別(INSERT
、UPDATE
或 DELETE
)與原始查詢相同。如果沒有新增滿足這些要求的查詢,則返回的命令狀態顯示原始查詢型別以及行數和 OID 欄位的零值。
程式設計師可以透過給 INSTEAD
規則起一個在活動規則中按字母順序排在最後的規則名,來確保在第二種情況下,任何期望的 INSTEAD
規則都是設定命令狀態的那個,因為它最後被應用。
如果您在文件中發現任何不正確的內容、與您對特定功能的體驗不符的內容或需要進一步澄清的內容,請使用 此表單 報告文件問題。