disable/enable 的 Postgresql 权限触发所有
Postgresql permissions for disable/enable trigger all
我需要为迁移的表禁用触发器和 constraints/foreign 键关系。我正在使用 flyway 进行迁移。
所以我想创建除超级用户以外的其他用户。并为新用户提供给定架构的 disable/enable 所有 trigger/constraints 的能力。
所以我尝试了这个:
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”是系统触发器。
当我用超级用户尝试这个脚本时,我可以 运行 它。但是我不能 运行 它与我创建的用户。
有什么建议吗?
您需要成为超级用户才能在 table 上禁用“系统触发器”。
原因是这些触发器实现了外键关系,禁用此类触发器会使数据库出现不一致。凡人无法执行此类操作。
您可以通过名称禁用每个普通触发器。
如果您的目标是禁用外键约束,那您就倒霉了:非超级用户可以做到这一点的唯一方法是删除约束。
我需要为迁移的表禁用触发器和 constraints/foreign 键关系。我正在使用 flyway 进行迁移。
所以我想创建除超级用户以外的其他用户。并为新用户提供给定架构的 disable/enable 所有 trigger/constraints 的能力。
所以我尝试了这个:
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”是系统触发器。
当我用超级用户尝试这个脚本时,我可以 运行 它。但是我不能 运行 它与我创建的用户。 有什么建议吗?
您需要成为超级用户才能在 table 上禁用“系统触发器”。
原因是这些触发器实现了外键关系,禁用此类触发器会使数据库出现不一致。凡人无法执行此类操作。
您可以通过名称禁用每个普通触发器。
如果您的目标是禁用外键约束,那您就倒霉了:非超级用户可以做到这一点的唯一方法是删除约束。