我在 Mac Sierra 上使用 Postgres 9.5。我想从我的本地数据库中导出一些记录并将它们导入到 Linux 机器上的数据库中(也运行 PostGres 9.5)。我正在使用此命令从本地机器导出数据……
localhost:myproject davea$ pg_dump -U myproject mydb -a -t table1 -t table2 -t table3 > /tmp/pgdata.sql
数据以一系列复制命令导出。有没有办法导出表数据,使文件有一堆“INSERT ... ON CONFLICT DO NOTHING;” 陈述?原始数据库和目标数据库中有一些重复,但我不希望这会破坏非重复数据的导入。
pg_dump
不会让你完全按照你的要求做,但你有一个可能足够好的选择。根据pg_dump 的文档,您可以--inserts
选择:例如,假设您使用
myhost
andmydb
。我们创建并填充一张表(在一个模式中):
在这一点上,我们备份它:
备份后,我们删除了表中的一行,但我们仍然保留了一行:
此时,我们确实恢复了备份(这是您通常在第二个数据库上执行的操作),并收到以下消息:
恢复过程产生了一个错误(表中已经存在的行),但确实插入了其余数据。
尽管这不是您所要求的,但出于所有实际目的,您可以实现您正在寻找的结果。