【问题标题】:Postgresql: Backup and restore some tables with primary keysPostgresql:使用主键备份和恢复一些表
【发布时间】:2012-08-21 11:06:00
【问题描述】:

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

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

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

【问题讨论】:

    标签: postgresql


    【解决方案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>
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

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

        【讨论】:

          猜你喜欢
          • 2013-10-15
          • 2017-02-14
          • 1970-01-01
          • 2010-10-05
          • 2017-10-10
          • 1970-01-01
          • 1970-01-01
          • 2018-10-12
          • 2014-09-03
          相关资源
          最近更新 更多