禁用/启用触发器所有的PostgreSQL权限

gr8qqesn  于 2023-04-11  发布在  PostgreSQL
关注(0)|答案(1)|浏览(217)

我需要在迁移时禁用表的触发器和约束/外键关系。我正在使用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";

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

ALTER TABLE "MY_SCHEMA".TBLTABLE
     DISABLE TRIGGER ALL;

我得到错误:拒绝权限:“RI_ConstraintTrigger_c_16434”是系统触发。
当我用超级用户运行这个脚本时,我可以运行它,但是我不能用我创建的用户运行它。有什么建议吗?

ru9i0ody

ru9i0ody1#

您需要成为超级用户才能禁用表上的“系统触发器”。
原因是这些触发器实现了外键关系,禁用这些触发器会使数据库暴露于不一致的情况。
您可以做的是按名称禁用每个普通触发器。
如果您的目标是禁用外键约束,那么您就不走运了:非超级用户能够做到这一点的唯一方式是通过丢弃约束。

相关问题