雖然許多觸發器用法涉及使用者編寫的觸發器函式,但 PostgreSQL 提供了一些內建觸發器函式,這些函式可以直接在使用者定義的觸發器中使用。這些函式總結在 表 9.110 中。(還存在其他內建觸發器函式,它們實現了外部索引鍵約束和延遲索引約束。這些不在此處文件化,因為使用者不需要直接使用它們。)
有關建立觸發器的更多資訊,請參閱 CREATE TRIGGER。
表 9.110. 內建觸發器函式
函式 描述 用法示例 |
---|
抑制無操作的更新操作。詳情見下文。
|
從關聯的純文字文件列自動更新
|
從關聯的純文字文件列自動更新
|
suppress_redundant_updates_trigger
函式,當作為行級 BEFORE UPDATE
觸發器應用時,將阻止任何實際上未更改行中資料的更新的發生。這會覆蓋正常行為,即正常行為始終執行物理行更新,而不管資料是否已更改。(這種正常行為使更新執行更快,因為不需要檢查,並且在某些情況下也很有用。)
理想情況下,您應該避免執行實際上並未更改記錄中資料的更新。冗餘更新可能耗費大量不必要的時間,特別是當有大量索引需要更改時,並且會產生死行空間,最終需要進行清理。但是,在客戶端程式碼中檢測這種情況並不總是容易,甚至不可能,並且編寫表示式來檢測它們可能容易出錯。另一種方法是使用 suppress_redundant_updates_trigger
,它會跳過不更改資料的更新。但是,您應該謹慎使用它。該觸發器對每條記錄都需要花費少量但非微不足道的時間,因此如果受更新影響的大部分記錄確實發生了更改,使用此觸發器將平均使更新執行速度變慢。
可以使用以下方式將 suppress_redundant_updates_trigger
函式新增到表中
CREATE TRIGGER z_min_update BEFORE UPDATE ON tablename FOR EACH ROW EXECUTE FUNCTION suppress_redundant_updates_trigger();
在大多數情況下,您需要為每行最後觸發此觸發器,以便它不會覆蓋其他可能希望修改行的觸發器。考慮到觸發器按名稱順序觸發,因此您應該選擇一個觸發器名稱,該名稱應排在您可能在表上設定的任何其他觸發器名稱之後。(因此,示例中的 “z” 字首。)
如果您在文件中發現任何不正確的內容、與您對特定功能的經驗不符的內容或需要進一步澄清的內容,請使用 此表格 報告文件問題。