You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确设置PostgreSQL触发器?解决bonus字段不自动更新问题

问题解决:PostgreSQL触发器自动更新bonus字段

你的触发器不生效的核心原因是使用了AFTER UPDATE类型的触发器——这类触发器是在数据已经写入表之后执行的,此时修改NEW.bonus的值不会同步到表中,因为更新操作已经完成。

正确的做法是改用BEFORE UPDATE触发器,在数据写入表之前修改NEW行的bonus值,这样修改后的结果会被正常写入表内。

修正后的完整代码

CREATE OR REPLACE FUNCTION client_bonus_update() RETURNS trigger AS $client_bonus_update$
    BEGIN
        NEW.bonus := NEW.money_spent * 0.1;
        RETURN NEW;
    END;
$client_bonus_update$ LANGUAGE plpgsql;

CREATE TRIGGER client_bonus_update
BEFORE UPDATE OF money_spent
ON client
FOR ROW EXECUTE FUNCTION client_bonus_update();

验证方法

执行更新语句测试:

UPDATE client SET money_spent = 100 WHERE contact_phone = '你的测试手机号';

然后查询该条数据:

SELECT money_spent, bonus FROM client WHERE contact_phone = '你的测试手机号';

此时bonus应该显示为10(即100的10%),说明触发器生效。

内容的提问来源于stack exchange,提问作者Paincake-

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:22:04