本文介紹了PolarDB PostgreSQL版(兼容Oracle)支持的觸發器函數。
雖然很多觸發器的使用都涉及到用戶編寫的觸發器函數,但本數據庫提供了一些可以直接在用戶定義觸發器中使用的內置觸發器函數。
有關創建觸發器的更多信息,請參考CREATE TRIGGER。
內置觸發器函數
阻止不做事的更新操作。詳見下文。
|
自動從相關的純文本文檔列更新
|
自動從相關的純文本文檔列更新
|
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”前綴)。