postgres条件触发器从子句中丢失

时间:2013-09-26 02:57:56

标签: postgresql triggers

我正在尝试在我的桌面上创建一个触发器,这样只有在我已经修改了'points_per_month'列值的行的'prepaid'列为true时才会运行它。我试过这个:

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告诉我这个:

  

错误:缺少表“行”的FROM子句条目   第1行:... r_month“ON”公共“。”客户“每次行(ROW.prepai ......

显然我没有FROM条款,但我不确定为什么我需要一个,也不知道在哪里放。

1 个答案:

答案 0 :(得分:0)

根据大卫的评论,这应该是when (new.prepaid)。您可以在when子句中访问旧的和新的(在更新之前和之后的行中),就像表别名一样。错误消息是PG抱怨该行不是已知表。

另外两个注意事项:

  • 如果您想管理结算方案切换,则可能需要when (old.prepaid or new.prepaid) - 或另外两个单独的触发器。相反,when (old.prepaid and new.prepaid)如果不这样做,有人可能会运行可能无意中触发触发器并创建不良状态的数据库查询(添加一个或两个单元测试)。
  • 函数名称表明代码流中可能出现错误。您可能希望通过正确设置可用的使用情况来解决此问题。这样做也可能更有效率。