gpt4 book ai didi

sql - 是否有一种安全的方法来修改表 pg_constraint 以便不再进行检查(暂时)?

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

为了从转储中恢复数据库,我想暂时禁用数据库所有表中的所有约束,我清空了这些表的内容(postregsql 8.3)。

是否有一种安全的方法来修改 pg_constraint 表中的字段,从而轻松绕过约束?

我看文档的时候不这么认为pg_constraint .

是否可以删除 pg_constraint 表内容,然后重新填充它?

如果不是,人们如何使用充满约束和外键的表来恢复/复制数据库? (我的目标数据库有架构,但所有列都是空的)。

编辑: 尽管 Erwin Brandstetter 的回答是对我的确切问题的很好的回答(带有明智的警告)...解决我的一般问题以避免恢复期间外键错误的方法是使用标志--使用 pg_restore 时禁用触发器。

最后,我的两行命令现在是:

pg_dump.exe  -h %ipAddress% -p 5432 -U postgres -F c -a -v -f %file% mydb
pg_restore.exe -h localhost -p 5432 -U postgres -d mydb -v %file% --disable-triggers

它工作正常。

最佳答案

你可以...

ALTER TABLE tbl DISABLE TRIGGER ALL;

这将永久禁用表的所有触发器。所以不要忘记稍后运行:

ALTER TABLE tbl ENABLE TRIGGER ALL;

-> 8.3 manual

你可以...

SET CONSTRAINTS ALL DEFERRED;

这使得所有可延迟约束等到事务结束。
-> 8.3 manual

您应该永远不要手动修改系统目录中的表,除非您是黑客并且确切地知道自己在做什么。凡人应该使用 DDL专门影响系统目录的命令。

关于sql - 是否有一种安全的方法来修改表 pg_constraint 以便不再进行检查(暂时)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12093654/

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