0

我正在尝试在我的表上创建一个触发器,以便它仅在我修改了“points_per_month”列的值的行的“预付”列为真时运行。我试过这个:

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

错误:缺少表“行”第 1 行的 FROM 子句条目:...r_month" ON "public"."clients" FOR EACH ROW WHEN (ROW.prepai...

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

4

1 回答 1

0

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

两个附加说明:

  • when (old.prepaid or new.prepaid)如果您想管理计费计划切换 - 或另外两个单独的触发器,则可能需要它。相反,when (old.prepaid and new.prepaid)如果您不这样做,那么有人可能会运行数据库查询,这些查询可能会无意中触发触发器并创建不良状态(添加一个或两个单元测试)。
  • 该函数的名称表明您的代码流中可能有问题。相反,您可能希望通过正确设置可用用法来解决此问题。这样做也可能更有效。
于 2013-09-26T15:23:02.440 回答