Ram*_*mya 4 postgresql postgresql-9.1 postgresql-9.4 amazon-aurora aws-dms
我正在使用 AWS Aurora Postgres 并使用 DMS 从 RDS postgres 迁移到 Aurora PG。为了执行 FULL LOAD,我想在所有对象上禁用外键约束和触发器。我能够禁用触发器,但找不到禁用约束的方法。
下面不起作用:
更改表 so_items 禁用约束 so_items_so_id_fkey;
它抛出:
错误:“CONSTRAINT”第 1 行或附近的语法错误:ALTER TABLE so_items DISABLE CONSTRAINT so_items_so_id_fkey; ^ SQL 状态:42601 字符:30
在参数组中设置 "session_replication_role" = "replica" 不起作用。当 DMS 任务尝试截断准备的表部分时,它仍然因外键违规错误而失败。
请告知任何解决方法。
注意:我不能在下面做,因为在 RDS 中,即使使用主帐户我也无权这样做:
alter table so_items disable trigger ALL;
Run Code Online (Sandbox Code Playgroud)
错误:权限被拒绝:“RI_ConstraintTrigger_c_16520”是系统触发器 SQL 状态:42501
您不能禁用约束。这毫无意义。
您可能DROP CONSTRAINT小号
ALTER TABLE so_items DROP CONSTRAINT so_items_so_id_fkey;
Run Code Online (Sandbox Code Playgroud)
这将永久删除它,或将约束检查推迟到交易结束:
ALTER TABLE so_items ALTER CONSTRAINT so_items_so_id_fkey DEFERRABLE INITIALLY DEFERRED;
Run Code Online (Sandbox Code Playgroud)
通过该修改,在当前事务结束时的修改之后评估约束。这将允许您打破事务内部的约束。
您不应该修改 Postgres 约束所依赖的触发器。这是一个您不应该关心的实现细节。
编辑:也可以禁用触发器,这也会影响表的外键约束
ALTER TABLE so_items DISABLE TRIGGER ALL;
Run Code Online (Sandbox Code Playgroud)
但是当您之后重新启用触发器时,不会检查外键。这可能会导致数据库中的外键无效/不一致。
| 归档时间: |
|
| 查看次数: |
15057 次 |
| 最近记录: |