PostgreSQL更新触发器异常:执行无报错但created_at字段未更新
问题原因及解决方案
你的触发器不生效有两个核心问题:
1. 触发器时机错误
你使用了AFTER UPDATE触发器,这类触发器是在行已经更新到数据库表之后才执行的,此时修改NEW变量的值不会对表中数据产生任何影响。必须改用BEFORE UPDATE,它会在行写入表之前执行,修改后的NEW值会被实际保存到表中。
2. 字段名不匹配
你目标是更新updated_at字段,但触发器函数里修改的是created_at,这导致实际更新的不是你想要的字段。
修正后的触发器函数
CREATE OR REPLACE FUNCTION update_updated_at_column() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = NOW(); RETURN NEW; END; $$ LANGUAGE plpgsql;
修正后的触发器配置
CREATE TRIGGER type_trigger_update_updated_at BEFORE UPDATE ON "type" FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
内容的提问来源于stack exchange,提问作者nboulfroy
相关产品推荐
相关产品推荐

