在AWS-RDS中创建Postgres事件触发器

7
我需要在我的RDS Postgres数据库上设置一个事件触发器。最终,我需要在模式更改时收到通知。在普通的Postgres中(即非RDS实例),这很有效。然而,在运行以下代码的RDS中: CREATE EVENT TRIGGER audit ON ddl_command_start EXECUTE PROCEDURE stat_audit(); 结果为:
ERROR:  permission denied to create event trigger
HINT:  Must be superuser to create an event trigger.

据我理解,RDS 上最特权的角色是 rds_superuser。我已经授予我的账户 rds_superuser(例如:grant rds_superuser to someuser;),但我仍然无法创建事件触发器。我知道 rds_superuser 并不完全等同于 pg 超级用户(可以通过运行 SHOW is_superuserSELECT * FROM pg_user 来确认)。 我也明白为什么 RDS 可能会锁定真正的超级用户权限,但如果我无法访问事件触发器,则这似乎是一个相当重要的限制。我有什么遗漏吗?在 RDS 上是否可能设置 Postgres 中的事件触发器?如果不行,是否有任何替代方案来模拟相同的功能?我知道 RDS 事件通知,但似乎没有订阅模式更改事件的选项。

这里也有同样的问题:/ 你找到任何解决方案了吗? - arod
@arod,我的社区研究(包括亚马逊)没有找到任何选项。虽然我没有找到任何具体说明在RDS中不可能的东西。但似乎您需要一个pg超级用户来设置pg事件触发器。在RDS中这是不可能的(只有rds_superuser)。我被迫选择另一条路。 - scottjustin5000
你走了哪条路线? - arod
在我的情况下,由于我对模式更改时发送消息感兴趣,我能够利用迁移并发布到rabbitMQ。虽然不是理想的解决方案,但它基本上满足了我的需求。然而,我显然会错过在迁移之外进行的修改。 - scottjustin5000
1个回答

4

我知道这是一个旧问题,但现在似乎已经得到支持。

PostgreSQL 9.4.9及更高版本以及9.5.4及更高版本支持事件触发器,并且Amazon RDS支持这些版本的事件触发器。主用户帐户可用于创建、修改、重命名和删除事件触发器。事件触发器位于DB实例级别,因此它们可以适用于实例上的所有数据库。有关Amazon RDS上的PostgreSQL事件触发器的更多信息,请参阅Event Triggers for PostgreSQL on Amazon RDS。

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.Concepts.General.FeatureSupport.EventTriggers


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接