14

我正在不同机器(PostgreSQL)上处理相同的数据库模式。我想知道,如何将数据从一台机器合并到另一台机器。Schema 有很多表(大约 10 个)。我想达到什么目的?

  1. 将数据从机器 A 转储到文件 A.dmp
  2. 将文件 A.dmp 中的数据恢复到机器 B
  3. 当机器B中已经存在一条记录时,我不想将它插入机器B。

我正在尝试将机器 A 中的数据转储到简单的 SQL 插入命令,但是当我尝试恢复它时,我遇到了重复的键错误。更重要的是,我想从命令行恢复数据(我必须导入 250 MB 数据),因为现在我正在尝试使用 pgAdmin 手动完成。

最好的方法是什么?

4

1 回答 1

12

我终于这样做了:

  1. 导出到转储:

    pg_dump -f dumpfile.sql --column-inserts -a -n <schema> -U <username> <dbname>
    
  2. 为所有表设置唯一的跳过

    CREATE OR REPLACE RULE skip_unique AS ON INSERT TO <table>
        WHERE (EXISTS (SELECT 1 FROM <table> WHERE users.id = new.id)) 
        DO INSTEAD NOTHING
    
  3. 导入psql

    \i <dumpfile.sql>
    
于 2013-11-25T18:38:49.887 回答