如何在PostgreSQL 9中禁用触发器?

11

在 PostgreSQL 8.x 中禁用触发器,我会这样做:

ALTER TABLE table DISABLE TRIGGER ALL;

当我在 PostgreSQL 9 中执行此操作时,我得到以下结果:

my_database=> ALTER TABLE my_table DISABLE TRIGGER ALL;
ERROR:  permission denied: "RI_ConstraintTrigger_25366" is a system trigger

提示:这个表是由运行此命令的用户创建的。

有何线索?

1个回答

21

有些触发器是自动添加的,用来强制执行约束条件,除非您是超级用户,否则无法禁用这些触发器。如果您只想禁用自己添加的普通触发器,请执行以下操作:

ALTER TABLE table DISABLE TRIGGER USER;

@André:自PostgreSQL 8.1版本以来,这种行为就一直存在。(顺便提醒一下,之后要执行 ALTER TABLE table ENABLE TRIGGER USER; - Erwin Brandstetter
嗨,感谢回复。我只能通过使用Postgres用户的“TRIGGER ALL”来禁用,而“TRIGGER USER”无法禁用触发器。 - André
8
不会禁用约束触发器,因为那样约束将不会被执行。如果你想禁用它们,就必须成为超级用户。 - TomH
1
要将某人设置为超级用户,请以超级用户身份运行“ALTER USER myuser WITH SUPERUSER;”。 - Dave

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