我有以下内容:
CREATE OR REPLACE TRIGGER trigger_commands
AFTER INSERT ON commands
FOR EACH ROW EXECUTE PROCEDURE on_commands_change();
它在本地Postgres实例上工作,但在AWS上失败:
[42601] ERROR: "TRIGGER"语法错误
但是,如果我删除'OR REPLACE'部分:
CREATE TRIGGER trigger_commands
AFTER INSERT ON commands
FOR EACH ROW EXECUTE PROCEDURE on_commands_change();
则RDS接受它。为什么呢?在每次代码重启时更新触发器的最佳方法是什么?
这很可能是Postgresql版本不匹配,CREATE OR REPLACE TRIGGER
只在Postgresql 14上工作(参见文档14和13)。
我建议使用DROP TRIGGER IF EXISTS
然后CREATE TRIGGER
来向后兼容。