"create or replace trigger" 在 AWS 上不可用 RDS/Postgres

"create or replace trigger" not available on AWS RDS/Postgres

我有以下内容:

CREATE OR REPLACE TRIGGER trigger_commands
    AFTER INSERT ON commands
    FOR EACH ROW EXECUTE PROCEDURE on_commands_change();

它适用于本地 Postgres 实例,但在 AWS 上失败:

[42601] ERROR: syntax error at or near "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 and 13)。

为了向后兼容,我建议使用 DROP TRIGGER IF EXISTS 然后 CREATE TRIGGER