繁体   English   中英

尝试恢复带有约束的表时,pg_restore 抛出错误

[英]pg_restore throws error when trying to restore a table with constraints

我尝试将表从生产环境转储到开发环境。 但是,在转储和恢复此表时,请使用以下命令:

pg_restore --no-owner --no-acl --clean --if-exists -d database dump_file.dump

我收到一条错误消息,指出我无法删除该表,除非我使用 CASCADE 之类的东西(即删除依赖于该表的所有其他表)。 有没有办法确定要删除的表? 有没有办法在pg_dump命令中转储我要转储的表和所有相关表?

这是引发的错误:

pg_restore:同时处理 TOC:pg_restore:来自 TOC 条目 4066; 2606 30526 CONSTRAINT table1 pkey user pg_restore:错误:无法执行查询:错误:无法删除表 public.table1 上的约束 pkey,因为其他对象依赖于它详细信息:表 public.dag 上的约束 id_fkey 依赖于索引 public.pkey 约束 id_fkey表 public.dag 取决于索引 public.pkey 提示:使用 DROP ... CASCADE 也可以删除依赖对象...

您在 dev 数据库上有一个表,该表具有一个依赖的 pkey,因此在还原之前无法删除。 这是正确的行为。

  1. 我没有看到转储/恢复特定表。 您正在转储/恢复整个数据库。

  2. 如果您想将生产数据库重新创建为开发数据库,​​请执行以下操作:

pg_restore -C --no-owner --no-acl --clean --if-exists -d postgres dump_file.dump

带有--clean-CDROP DATABASE db_name然后通过连接到数据库postgres以执行DROP/CREATE db_name然后连接到db_name以加载其余对象来从头开始重建它。

这是清除杂物并从一致状态开始的最佳方法。

更新

  1. 使用pg_dump命令更新您的问题,以便清楚您在做什么。

  2. 如果您想查看特定表是否具有依赖关系,请在原始数据库中使用psql并执行\d the_table以查看与该表的依赖关系是什么。 如果您告诉pg_dump转储单个表,它将仅转储该表。 它不会遵循依赖关系并转储它们。 这取决于你。

  3. 考虑使用模式管理工具进行更改/迁移。 我为此使用Sqitch

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM