我有一个包含70个表的生产Postgresql数据库。其中一些非常大,一些很小。我在我的本地机器上有我的本地Postgresql数据库。我想让我的一些本地数据库表的内容与生产的相同。如果我只是在生产数据库上使用pgAdmin备份一些表,然后尝试在本地计算机上进行恢复,则会出现约束错误。因为例如表A具有表B的外键等等。
我如何从生产数据库中复制一些表并在我的本地机器上正常恢复,该机器已经有方案和表格而没有约束错误?
P.S。我不能只转储所有生产数据库,因为有些表非常大。
答案 0 :(得分:1)
转储完整的生产数据库,但在没有大型表的情况下没有数据:
$ pg_dump -t <VERY_BIG_TABLE_NAME> -s
如果您还想要数据,请避免使用-s
选项。由于您将不得不重复这70次,因此更快的解决方案是将表划分为模式:
$ pg_dump -n <SCHEMA_NAME_WITH_VERY_BIG_TABLES> -s
$ pg_dump -n <SCHEMA_NAME_WITH_SMALL_TABLES>
答案 1 :(得分:0)
我不确定我是否理解,但是如果你有约束检查错误,你可以禁用外键约束,恢复表并再次启用它们。
答案 2 :(得分:0)
DEFERRABLE INITIALLY DEFERRED
添加CONSTRAINT
个选项BEGIN;
。在文件末尾追加:
导致问题的每个FK列UPDATE TABLE problem_no_1 SET fkey_column = NULL;
,当然COMMIT;