PostgreSQL删除含不存在大对象的行报错SQL Error [42704]如何解决
错误原因
你配置的lo_manage触发器会在删除/更新rep_reportjob表行时,自动清理filledreport字段关联的大对象。由于你要删除的行关联的大对象ID 123456已经被提前删除,触发器找不到对应大对象就会抛出42704错误,导致删除行操作失败。
解决方法
方案1:临时禁用触发器(推荐)
- 第一步:临时关闭目标触发器
ALTER TABLE rep_reportjob DISABLE TRIGGER t_filledreport;
- 第二步:执行删除语句,清理问题行(请自行替换WHERE条件匹配你要删除的行)
DELETE FROM rep_reportjob WHERE [你的行过滤条件];
- 第三步:操作完成后重新启用触发器,避免后续业务操作产生大对象残留
ALTER TABLE rep_reportjob ENABLE TRIGGER t_filledreport;
方案2:占位补全大对象(无需修改触发器配置)
如果不希望调整触发器状态,可以先手动创建对应ID的大对象占位,再正常删除行:
- 第一步:创建ID为123456的大对象
SELECT lo_create(123456);
- 第二步:执行正常的DELETE操作即可,触发器执行时会自动删除这个占位大对象,不会产生残留。
注意:操作前建议提前备份相关数据,避免误删业务数据
内容的提问来源于stack exchange,提问作者Gherta Nicolae
相关产品推荐
相关产品推荐

