禁用/启用触发所有的 Postgresql 权限

jav*_*r35 4 sql postgresql flyway

迁移时我需要禁用表的触发器和约束/外键关系。我正在使用 Flyway 进行迁移。

因此,我想创建一个除超级用户之外的不同用户,并让新用户能够禁用/启用给定模式的所有触发器/约束。

所以我尝试了这个:

CREATE USER "MY_USER" WITH PASSWORD 'password';
GRANT ALL PRIVILEGES ON DATABASE postgres to "MY_USER";

create schema "MY_SCHEMA";

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA "MY_SCHEMA" TO "MY_USER";
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA "MY_SCHEMA" TO "MY_USER";
GRANT ALL PRIVILEGES ON SCHEMA "MY_SCHEMA" TO "MY_USER";
Run Code Online (Sandbox Code Playgroud)

但是当我使用 MY_USER 并尝试运行此脚本时:

ALTER TABLE "MY_SCHEMA".TBLTABLE
     DISABLE TRIGGER ALL;
Run Code Online (Sandbox Code Playgroud)

我收到错误:权限被拒绝:“RI_ConstraintTrigger_c_16434”是系统触发器。

当我使用超级用户尝试此脚本时,我可以运行它,但无法使用我创建的用户运行它。有什么建议么?

Lau*_*lbe 8

您需要成为超级用户才能禁用表上的 \xe2\x80\x9c 系统触发器\xe2\x80\x9d。

\n

原因是这些触发器实现外键关系,禁用此类触发器会使数据库面临不一致的情况。人们不相信凡人能够做出这样的行为。

\n

您可以做的是按名称禁用每个正常触发器。

\n

如果您的目标是禁用外键约束,那么您就不走运了:非超级用户可以做到这一点的唯一方法是删除约束。

\n