PostgreSQL触发器和行更新

PostgreSQL触发器和行更新,第1张

概述我正在尝试根据此触发器更新表: CREATE TRIGGER alert AFTER UPDATE ON carsFOR EACH ROWEXECUTE PROCEDURE update_cars(); 触发功能: CREATE FUNCTION update_cars()RETURNS 'TRIGGER' AS $BODY$BEGIN IF (TG_OP = 'UPDATE') T 我正在尝试根据此触发器更新表:
CREATE TRIGGER alert AFTER UPDATE ON carsFOR EACH ROWEXECUTE PROCEDURE update_cars();

触发功能:

CREATE FUNCTION update_cars()RETURNS 'TRIGGER' AS $BODY$BEGIN IF (TG_OP = 'UPDATE') THENUPDATE hello_cars SET status = new.status WHERE olD.ID = NEW.ID;END IF;RETURN NulL;END;$$LANGUAGE plpgsql;

触发器工作正常.更新cars表时,会更新hello_cars表,但每行中的status列都会更新并包含相同的新状态!必须根据车辆ID更新.
我认为我的问题是条件:WHERE olD.ID = NEW.ID;但我不知道出了什么问题.

提前致谢.

olD和NEW是触发触发器的行的别名.所以当你执行一个类似的语句时
UPDATE cars SET status='xyz' WHERE cars.ID = 42;

然后触发器功能将执行

UPDATE hello_cars SET status='xyz' WHERE 42 = 42

42 = 42部分始终为真.因此,hello_cars中的每一行都会更新.

你真的想要这样的东西

[...]WHERE hello_cars.ID = olD.ID

或者更短一些

[...]WHERE ID = olD.ID

但是如果初始更新改变了cars.ID,你还需要考虑会发生什么.在这种情况下,olD.ID不等于NEW.ID.在这种情况下,表hello_cars中应该发生什么?但这是另一个问题.

总结

以上是内存溢出为你收集整理的PostgreSQL触发器和行更新全部内容,希望文章能够帮你解决PostgreSQL触发器和行更新所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1170178.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存