Postgresql 子句中缺少postgres条件触发器

Postgresql 子句中缺少postgres条件触发器,postgresql,triggers,Postgresql,Triggers,我正在尝试在我的表上创建一个触发器,这样它只有在我修改了“每月点数”列的值的行的“预付费”列为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"(); ps

我正在尝试在我的表上创建一个触发器,这样它只有在我修改了“每月点数”列的值的行的“预付费”列为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告诉我:

错误:表“行”的子句条目中缺少 第1行:…r_month“ON”ON“public”。“clients”在(ROW.prepai

很明显,我没有FROM子句,但我不确定为什么需要FROM子句,也不确定将其放置在何处。

根据David的评论,这应该是
when(new.preadward)
。您可以在when子句中访问新旧内容(如更新前后的行中)很像表别名。错误消息是,行不是已知表

另外两项说明:

  • 如果要管理计费计划切换,则可能需要
    when(old.preadward或new.preadward)
    ,或者另外两个单独的触发器。相反,
    when(old.preadward和new.preadward)
    如果不这样做,则可能会有人运行数据库查询,无意中触发触发器并创建不希望的状态(添加一两个单元测试)
  • 该函数的名称表明代码流中可能存在错误。您可能希望通过正确设置可用用法来解决此问题。这样做也可能更有效

尝试从
ROW.prepared
.ah、oops、nope中删除
ROW。
替换为
NEW。
谢谢,用NEW.prepared替换正是所需。