Postgresql:使用主键备份和恢复一些表

时间:2012-08-21 11:06:00

标签: postgresql

我有一个包含70个表的生产Postgresql数据库。其中一些非常大,一些很小。我在我的本地机器上有我的本地Postgresql数据库。我想让我的一些本地数据库表的内容与生产的相同。如果我只是在生产数据库上使用pgAdmin备份一些表,然后尝试在本地计算机上进行恢复,则会出现约束错误。因为例如表A具有表B的外键等等。

我如何从生产数据库中复制一些表并在我的本地机器上正常恢复,该机器已经有方案和表格而没有约束错误?

P.S。我不能只转储所有生产数据库,因为有些表非常大

3 个答案:

答案 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)

  1. 在本地数据库中重新创建表结构,但为有问题的外键DEFERRABLE INITIALLY DEFERRED添加CONSTRAINT个选项
  2. 使用pg_dump将您选择的表格数据从生产数据库转储到文件中并在一开始就写入:BEGIN;。在文件末尾追加: 导致问题的每个FK列UPDATE TABLE problem_no_1 SET fkey_column = NULL;,当然COMMIT;
  3. 在本地数据库
  4. 上执行此文件