Oracle转PostgreSQL时AWS SCT生成触发器提示函数不存在如何修复
错误原因
PostgreSQL的触发器机制和Oracle存在核心差异:Oracle触发器可以直接在定义内写执行逻辑,PostgreSQL要求触发器必须绑定一个预先创建的触发器函数,你收到的报错就是因为AWS SCT仅生成了触发器的创建语句,没有同步生成对应的触发器函数导致的。
修复步骤
步骤1:创建缺失的触发器函数
执行以下SQL创建SCT生成的触发器绑定的目标函数:
CREATE OR REPLACE FUNCTION schema1.table1_ta$table() RETURNS TRIGGER LANGUAGE plpgsql AS $function$ BEGIN -- 对应原Oracle触发器的判断逻辑,PostgreSQL用OLD访问删除前的行数据 IF OLD.hid = 0 OR OLD.hid = -1 THEN -- 自定义错误码规则为P+4位数字(PostgreSQL用户自定义错误码要求5位,P开头标识自定义) RAISE EXCEPTION 'Error Message' USING ERRCODE = 'P1234'; END IF; -- AFTER DELETE类型的触发器固定返回OLD即可 RETURN OLD; END; $function$;
步骤2:执行触发器创建语句
此时再运行AWS SCT生成的触发器创建代码就不会报函数不存在的错误:
CREATE TRIGGER table1_ta AFTER DELETE ON schema1.table1 FOR EACH ROW EXECUTE PROCEDURE schema1.table1_ta$table();
可选优化说明
如果你不想保留SCT自动生成的晦涩函数名,也可以自定义函数名(比如table1_delete_check_hid),只需同步修改触发器语句中调用的函数名即可,逻辑完全一致。
内容的提问来源于stack exchange,提问作者xpetta
相关产品推荐
相关产品推荐

