AWS RDS PostgreSQL不支持CREATE OR REPLACE TRIGGER的原因及更新方案
问题原因
PostgreSQL的CREATE OR REPLACE TRIGGER语法是14版本才正式推出的新特性,你本地运行正常是因为本地PostgreSQL实例版本≥14,而AWS RDS上部署的PostgreSQL实例版本≤13,低版本不支持OR REPLACE修饰符,因此触发语法错误。
触发器更新的最优实现方案
- 兼容全版本的通用方案:先执行删除已存在触发器的语句,再创建新触发器,且将两步操作包裹在同一个事务中,避免触发器短暂缺失的问题:
BEGIN; -- 触发器已存在则先删除 DROP TRIGGER IF EXISTS trigger_commands ON commands; -- 重新创建触发器 CREATE TRIGGER trigger_commands AFTER INSERT ON commands FOR EACH ROW EXECUTE PROCEDURE on_commands_change(); COMMIT;
- 若后续将AWS RDS的PostgreSQL版本升级到14及以上,可直接使用原生的
CREATE OR REPLACE TRIGGER语法,无需额外处理。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

