![](/img/trans.png)
[英]Error when using pg_restore to restore database in docker compose
[英]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,因此在还原之前无法删除。 这是正确的行为。
我没有看到转储/恢复特定表。 您正在转储/恢复整个数据库。
如果您想将生产数据库重新创建为开发数据库,请执行以下操作:
pg_restore -C --no-owner --no-acl --clean --if-exists -d postgres dump_file.dump
带有--clean
的-C
将DROP DATABASE db_name
然后通过连接到数据库postgres
以执行DROP/CREATE db_name
然后连接到db_name
以加载其余对象来从头开始重建它。
这是清除杂物并从一致状态开始的最佳方法。
更新
使用pg_dump
命令更新您的问题,以便清楚您在做什么。
如果您想查看特定表是否具有依赖关系,请在原始数据库中使用psql
并执行\d the_table
以查看与该表的依赖关系是什么。 如果您告诉pg_dump
转储单个表,它将仅转储该表。 它不会遵循依赖关系并转储它们。 这取决于你。
考虑使用模式管理工具进行更改/迁移。 我为此使用Sqitch 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.