禁用 RDS Postgres 上的触发器

3
我正在尝试使用以下语句在RDS上禁用Postgres的触发器:
ALTER TABLE table_name DISABLE TRIGGER ALL;

但我遇到了以下错误:

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.InsufficientPrivilege) permission denied: "RI_ConstraintTrigger_a_16536" is a system trigger.

有没有办法在RDS上删除触发器,因为我不能在RDS上给自己超级用户权限?我查看了很多文章,但没有找到合适的解决方案。


你所说的“禁用触发器”是指禁用整个PostgreSQL中的“触发器”概念,还是单个触发器,或者某些特定于RDS的东西?你执行什么命令来禁用它? - 404
1
"ALTER TABLE table_name DISABLE TRIGGER ALL;" 这是我要执行的命令。 - Siddharth Sampath
1
你真的想禁用那个特定的触发器吗?因为这可能会破坏数据库中的某些内容。系统触发器用于强制执行约束等操作。无论如何,如果您使用具有“rds_superuser”组成员身份的角色登录,则已经拥有了在RDS中可以拥有的最大权限。如果您仍然无法完成所需的操作,则无法完成(或者至少不能以那种方式完成 - 例如,您可能需要删除相关约束而不是禁用触发器)。 - 404
1
基本上,我正在尝试删除多个表的内容,这些表具有循环外键依赖关系。我使用SQLAlchemy与Postgres。为了避免外键错误,我正在禁用触发器并删除表的内容。一旦所有内容都被删除,我会为每个表启用触发器。有更好的方法吗? - Siddharth Sampath
1
有些人似乎通过将DB定义为副本来解决这个问题:例如 https://github.com/ankane/pgsync/issues/94。这感觉很笨拙,但到目前为止这是我找到的最好的解决方法... - JohnLBevan
2
这里有一个类似的讨论:https://dev59.com/NlYM5IYBdhLWcg3wzSog - JohnLBevan
1个回答

0

您需要逐个禁用触发器。在RDS中,所有选项命令不起作用。

alter table schema.table_name disable trigger trigger_name;


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