gpt4 book ai didi

postgresql - 如何在postgresql中禁用外键约束

转载 作者:行者123 更新时间:2023-11-29 12:35:28 56 4
gpt4 key购买 nike

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

以下不起作用:

更改表 so_items 禁用约束 so_items_so_id_fkey;

它抛出:

ERROR: syntax error at or near "CONSTRAINT" LINE 1: ALTER TABLE so_items DISABLE CONSTRAINT so_items_so_id_fkey; ^ SQL state: 42601 Character: 30

在参数组中设置 "session_replication_role"= "replica"无效。虽然 DMS 任务尝试截断准备过程中的表部分,但它仍然因外键违规错误而失败。

请告知任何解决方法。

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

alter table so_items disable trigger ALL;

ERROR: permission denied: "RI_ConstraintTrigger_c_16520" is a system trigger SQL state: 42501

最佳答案

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

您不能禁用约束,真的。

要暂时关闭约束,您可以将约束检查推迟到事务结束时:

ALTER TABLE so_items ALTER CONSTRAINT so_items_so_id_fkey DEFERRABLE INITIALLY DEFERRED;

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

您可以 DROP CONSTRAINT

ALTER TABLE so_items DROP CONSTRAINT so_items_so_id_fkey;

这将永久删除它。

编辑:也可以禁用同样影响表外键约束的触发器

ALTER TABLE so_items DISABLE TRIGGER ALL;

但是当您之后重新启用触发器时,不会检查外键。这可能会导致数据库中的外键无效/不一致。

关于postgresql - 如何在postgresql中禁用外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48333319/

56 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com