?
本文檔使用 PHP中文網(wǎng)手冊 發(fā)布
當前PostgreSQL提供一個構建的觸發(fā)器函數(shù),suppress_redundant_updates_trigger
,
其將阻止任何不會實際更改行中的數(shù)據(jù)發(fā)生,相反正常的行為,始終執(zhí)行的更新,不管數(shù)據(jù)已經(jīng)改變。
(這是正常的行為,使得更新運行速度更快,因為沒有需要檢查,并在某些情況下也是有用的。)
理想的情況下,你通常應該避免運行實際上并沒有改變記錄中的數(shù)據(jù)更新。
冗余更新可以花費大量不必要的時間,尤其是如果有大量索引的改變,
并將最終不得不被清空的死行中的空間。然而,檢測這種情況下在客戶端代碼并不總是容易的或甚至可能,
而寫表達式以檢測到它們?nèi)菀桩a(chǎn)生錯誤。使用suppress_redundant_updates_trigger
更新,可以跳過不改變數(shù)據(jù)的更新。
觸發(fā)器需要小但非一般的時間為每條記錄,所以如果大多數(shù)記錄實際發(fā)生更改而受更新,此觸發(fā)器的使用將實際上使更新運行得更慢。
suppress_redundant_updates_trigger
函數(shù)可以添加到一個表像這樣:
CREATE TRIGGER z_min_update BEFORE UPDATE ON tablename FOR EACH ROW EXECUTE PROCEDURE suppress_redundant_updates_trigger();
在大多數(shù)情況下,您希望為每行最后觸發(fā)此觸發(fā)器。 心中銘記觸發(fā)器的名稱順序,然后,你會選擇一個觸發(fā)名稱來自于你可能會對該表有任何其它觸發(fā)器名。
獲取更多關于創(chuàng)建觸發(fā)器,見CREATE TRIGGER。