7

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

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

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

4

3 回答 3

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>
于 2012-08-21T11:57:11.963 回答
0

我不确定我是否理解,但如果您遇到约束检查错误,您可以禁用外键约束,恢复表并再次启用它们。

于 2012-08-21T11:48:22.163 回答
0
  1. 在本地数据库中重新创建表结构,但为有问题的DEFERRABLE INITIALLY DEFERRED外键添加选项CONSTRAINT
  2. 使用 pg_dump 将您选择的表数据从生产数据库转储到文件并在开头写入:BEGIN;. 在文件末尾追加: UPDATE TABLE problem_no_1 SET fkey_column = NULL;对于导致问题的每个 FK 列,当然COMMIT;在最后
  3. 在本地数据库上执行此文件
于 2012-08-21T13:05:22.327 回答