如何正确设置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-
相关产品推荐
相关产品推荐

