2013-09-26 33 views
0

我想創建我的表的觸發器,如果​​「預付」列是在那裏我已經修改了「points_per_month」列的值的行真,使得它只能運行失蹤。我嘗試這樣做:Postgres的條件觸發from子句

CREATE TRIGGER "fix_usage_trigger" 
AFTER UPDATE OF "points_per_month" 
ON "public"."clients" 
FOR EACH ROW WHEN (ROW.prepaid) 
EXECUTE PROCEDURE "fix_prepaid_client_available_usage"(); 

PSQL告訴我:

ERROR: missing FROM-clause entry for table "row" LINE 1: ...r_month" ON "public"."clients" FOR EACH ROW WHEN (ROW.prepai...

顯然,我沒有FROM子句的存在,但我不知道爲什麼我需要一個,也不是把它放在哪裏。

+0

嘗試刪除從'ROW.prepaid'的'ROW.'。 –

+1

啊,哎呀,不。相反,用'NEW.'取代'ROW.' –

+0

感謝,與NEW.prepaid更換是它需要什麼。 – Gargoyle

回答

0

這應該是when (new.prepaid),每大衛的評論。你可以在when子句中訪問舊的和新的(就像更新前後的行一樣),就像表中的別名一樣。錯誤消息是PG抱怨行不是已知的表。

兩個額外的注意事項:

  • 如果你想管理計費計劃交換機它可能需要when (old.prepaid or new.prepaid) - 或者其他兩個獨立的觸發器。相反,when (old.prepaid and new.prepaid)如果你不這樣做,有人可能會進行數據庫查詢,可能無意中激活觸發器和產生不希望的狀態(添加一個單元測試或兩個)。
  • 函數的名字暗示的東西可能錯了進一步爲在你的代碼流。相反,您可能想要解決這個問題,只需正確設置可用的使用情況即可。這樣做也許更有效率。