?
本文檔使用
php中文網(wǎng)手冊 發(fā)布
當(dāng)前PostgreSQL提供一個構(gòu)建的觸發(fā)器函數(shù),suppress_redundant_updates_trigger
,
其將阻止任何不會實(shí)際更改行中的數(shù)據(jù)發(fā)生,相反正常的行為,始終執(zhí)行的更新,不管數(shù)據(jù)已經(jīng)改變。
(這是正常的行為,使得更新運(yùn)行速度更快,因?yàn)闆]有需要檢查,并在某些情況下也是有用的。)
理想的情況下,你通常應(yīng)該避免運(yùn)行實(shí)際上并沒有改變記錄中的數(shù)據(jù)更新。
冗余更新可以花費(fèi)大量不必要的時間,尤其是如果有大量索引的改變,
并將最終不得不被清空的死行中的空間。然而,檢測這種情況下在客戶端代碼并不總是容易的或甚至可能,
而寫表達(dá)式以檢測到它們?nèi)菀桩a(chǎn)生錯誤。使用suppress_redundant_updates_trigger
更新,可以跳過不改變數(shù)據(jù)的更新。
觸發(fā)器需要小但非一般的時間為每條記錄,所以如果大多數(shù)記錄實(shí)際發(fā)生更改而受更新,此觸發(fā)器的使用將實(shí)際上使更新運(yùn)行得更慢。
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ā)器名。
獲取更多關(guān)于創(chuàng)建觸發(fā)器,見CREATE TRIGGER。