我正在尝试向 AWS RDS Postgresql 添加触发器函数,看起来查询运行成功,正在添加更新触发器,并且正在添加触发器函数,但是当我更新表时,触发器没有执行。然而,当我在本地安装的 Postgresql 数据库中运行相同的触发器查询时,它工作正常。
我还看到了一篇类似的帖子,是关于启用AWS RDS Mysql触发器的,我想知道是否有人知道如何启用AWS RDS Postgresql触发器功能,我们将不胜感激。谢谢你。
CREATE OR REPLACE FUNCTION emp_trg_func()
RETURNS TRIGGER
LANGUAGE 'plsql'
AS $$
DECLARE BEGIN
IF new.emp_age > 65 THEN
RAISE EXCEPTION 'Age is greater than 65'
END IF;
RETURN new;
END;
$$;
CREATE TRIGGER emp_trg
BEFORE UPDATE ON emp_tbl
FOR EACH ROW
EXECUTE PROCEDURE emp_trg_func()
确保 RDS 组参数中的 AWS RDS Postgresql 以下参数设置为 origin,因为副本将阻止在 AWS RDS Postgresql 中执行触发器
session_replication_role(枚举)# 控制当前会话的复制相关触发器和规则的触发。可能的值为原始(默认)、副本和本地。设置此参数将导致丢弃任何先前缓存的查询计划。只有超级用户和具有适当 SET 权限的用户才能更改此设置。
此设置的预期用途是逻辑复制系统在应用复制更改时将其设置为副本。其效果是触发器和规则(未从默认配置中更改)不会在副本上触发。有关详细信息,请参阅 ALTER TABLE 子句 ENABLE TRIGGER 和 ENABLE RULE。
PostgreSQL 在内部将 origin 和 local 设置视为相同。第三方复制系统可以将这两个值用于其内部目的,例如使用 local 来指定不应复制其更改的会话。
由于外键是作为触发器实现的,因此将此参数设置为副本也会禁用所有外键检查,如果使用不当,可能会使数据处于不一致的状态。