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

INSERT后新插入行字符串修改触发器失效问题排查

INSERT触发器无法正常工作的问题分析及修复

你的触发器代码存在几个关键问题,导致无法正常运行,具体如下:

核心问题点

  • 触发器时机错误:使用了AFTER INSERT,此时新行已经写入数据库,修改NEW变量不会对表中数据产生任何影响。要修改插入的行,必须使用BEFORE INSERT触发器,这样才能在数据写入前修改NEW的值。
  • 错误引用OLD变量:在INSERT触发器的上下文中,不存在OLD行(只有UPDATE/DELETE触发器才有OLD),你应该引用NEW.filename来获取新插入行的字段值。
  • 触发器级别错误:使用了FOR EACH STATEMENT,这是语句级触发器,不会逐行处理插入的数据,也无法访问单行的NEW变量。需要改为FOR EACH ROW,让触发器对每一行插入操作生效。
  • 语法遗漏:DROP TRIGGER语句末尾缺少分号,会导致语法错误。

修复后的完整代码

-- 删除旧触发器(补充分号)
DROP TRIGGER IF EXISTS date_extraction ON sentinel_2.t32upb;

-- 删除旧函数
DROP FUNCTION IF EXISTS date_extraction();

-- 创建修复后的触发器函数
CREATE FUNCTION date_extraction() RETURNS trigger AS $$
BEGIN
  -- 引用NEW.filename,而非OLD.filename
  NEW.filename := replace(split_part(NEW.filename, '_', 2), '.tif', '');
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- 创建BEFORE INSERT的行级触发器
CREATE TRIGGER date_extraction
BEFORE INSERT ON sentinel_2.t32upb
FOR EACH ROW EXECUTE PROCEDURE date_extraction();

内容的提问来源于stack exchange,提问作者Manap Shymyr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:10:24