如何在postgresql

时间:2018-01-19 02:32:45

标签: postgresql postgresql-9.1 postgresql-9.4 amazon-rds-aurora aws-dms

我使用AWS Aurora Postgres并使用DMS从RDS postgres迁移到Aurora PG。为了执行FULL LOAD,我想在所有对象上禁用外键约束和触发器。我能够禁用触发器,但无法找到禁用约束的方法。

以下不起作用:

ALTER TABLE so_items DISABLE CONSTRAINT so_items_so_id_fkey;

它抛出:

  

错误:语法错误在或附近" CONSTRAINT"   第1行:ALTER TABLE so_items DISABLE CONSTRAINT so_items_so_id_fkey;                                        ^   SQL状态:42601   性格:30

设置" session_replication_role" ="复制品"在参数组中没有工作。当DMS任务尝试截断表的部分准备时,它仍然会因外键冲突错误而失败。

请告知任何解决方法。

注意:我无法在下面执行此操作,因为在RDS中,即使使用主帐户,我也无权这样做:

alter table so_items disable trigger ALL;
  

错误:拒绝许可:" RI_ConstraintTrigger_c_16520"是一个系统触发器   SQL状态:42501

1 个答案:

答案 0 :(得分:3)

您无法禁用约束。这没有任何意义。

你可以DROP CONSTRAINT s

ALTER TABLE so_items DROP CONSTRAINT so_items_so_id_fkey;

将永久删除它,或将约束检查推迟到事务结束:

ALTER TABLE so_items ALTER CONSTRAINT so_items_so_id_fkey DEFERRABLE INITIALLY DEFERRED;

通过该修改,在当前事务结束时修改后评估约束。这将允许您打破事务内部的约束。

你不应该修改Postgres约束所依赖的触发器。这是一个您不应该关心的实现细节。