我尝试将表从生产环境转储到开发环境。但是,在转储和恢复该表时,使用以下命令:
pg_restore --no-owner --no-acl --clean --if-exists -d database dump_file.dump
我得到一个错误,说明我不能删除该表,除非我使用CASCADE之类的东西(即删除依赖于该表的所有其他表)。是否有办法确定要删除的表?在pg_dump
命令中是否有一种可能状态的方法来转储我要转储的表和所有相关表?
下面是引发的错误:
pg_restore: while PROCESSING TOC:pg_restore:从TOC表项4066恢复;2606 30526约束表1 pkey用户pg_restore: error: could not execute query: error: cannot drop constraint pkey on table public。因为其他对象依赖于表1public表上的约束id_fkey。Dag依赖于索引public.pkeypublic表上的约束id_fkey。Dag依赖于索引public.pkey提示:使用DROP…级联来删除依赖对象…
在dev数据库上有一个表,它有一个pkey是依赖的,因此在恢复之前不能删除。这是正确的行为。
-
我没有看到转储/恢复特定的表。您正在转储/恢复整个数据库。
-
如果您想将生产数据库重新创建为开发数据库,则执行:
pg_restore -C --no-owner --no-acl --clean --if-exists -d postgres dump_file.dump
-C
与--clean
将DROP DATABASE db_name
,然后从头开始重建它连接到数据库postgres
做DROP/CREATE db_name
,然后连接到db_name
加载其余的对象。
这是清理杂物并从一致状态开始的最佳方法。
用
pg_dump
命令更新你的问题,这样你正在做的事情就很明显了。如果你想查看一个特定的表是否有依赖关系,在原始数据库中使用
psql
和d the_table
来查看表之间的依赖关系。如果您告诉pg_dump
转储单个表,它将只转储该表。它不会跟随依赖项,也不会转储依赖项。那由你来做。考虑使用模式管理工具来执行更改/迁移。我使用Sqitch。