![](/img/trans.png)
[英]GCP Dataflow streaming data to BigQuery RAW table, trigger transformation/insertion into data mart table
[英]disable trigger on table on GCP
我正在进行数据库迁移,我需要禁用表上的外键约束才能和平迁移。
我收集到我需要超级用户权限才能运行:
SET session_replication_role = replica;
和
SET session_replication_role = DEFAULT;
然而; 在谷歌云平台上,不可能获得文档中详述的那些特权:
postgres 用户是 cloudsqlsuperuser 角色的一部分,具有以下属性(权限):CREATEROLE、CREATEDB 和 LOGIN。 它没有 SUPERUSER 或 REPLICATION 属性
以及这个 StackOverflow 问题: upgrade user to superuser in postgres google cloud
我还尝试通过以下方式禁用触发器:
alter table orders.orders disable trigger all;
然而; 为此,在我看来,我还需要 su 权限: ERROR: permission denied: "RI_ConstraintTrigger_a_25017" is a system trigger
那么,解决方案是什么,我什至可以禁用触发器 // 这个特定表上的外键约束吗?
实际上你不需要超级用户来发布
SET session_replication_role = replica;
SET session_replication_role = default;
你只需要复制(我刚刚测试过)
ALTER ROLE <your user> REPLICATION;
没有办法获得超级用户权限,但您可以通过设置正确的数据库标志来获得一些超级用户权限。
引用文档: https://cloud.google.com/sql/docs/postgres/flags#session_replication_role
session_replication_role PostgreSQL 有一个 session_replication_role 标志,该标志旨在用于逻辑复制,并允许在单个会话中禁用约束触发器。
有时这个标志也可以用于一些维护操作来规避约束(最常见的是外键)检查。
任何设置了 REPLICATION 属性的用户都可以在 session 中设置此标志。 当为实例设置标志 cloudsql.enable_pglogical 或 cloudsql.logical_decoding 之一时,cloudsqlsuperuser 可以设置任何用户的 REPLICATION 属性。
如何在数据库中设置标志非常简单,并在此处进行了解释: https://cloud.google.com/sql/docs/postgres/flags#set_a_database_flag适用于所有情况(控制台、gcloud、terraform 等)
我在尝试解决同样的问题时找到了上述解决方案。 然而,正如@Paolo Castelletti 所说,
ALTER ROLE <your user> REPLICATION;
实际上足以让我申请
SET session_replication_role = replica;
我也想分享另一种方法,以防它对某人有帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.