PostgreSQL,用pg_restore更新现有的行

我需要同步两个PostgreSQL数据库(从开发数据库一些表到生产数据库)有时。

所以我想出了这个脚本:

[...] pg_dump -a -F tar -t table1 -t table2 -U user1 dbname1 | \ pg_restore -a -U user2 -d dbname2 [...] 

问题是,这只适用于新添加的行。 当我编辑非PK列时,我得到约束错误,行不更新。 对于每个转储的行,我需要检查它是否存在于目标数据库中(通过PK),如果是这样,在INSERT / COPY之前删除它。

谢谢你的build议。

(以前张贴在stackoverflow.com,但恕我直言,这是更好的地方这个问题)。

在我见过的任何环境中,这通常不是在桌子的基础上进行的。

  • 任何行都有很多可能性:SELECT / INSERT / UPDATE / ALTER …你需要关心所有这些可能性。

  • 表不是数据库中唯一的东西,特别是PostgreSQL数据库。 序列,函数,聚合,视图等可能都需要被复制。

如果我在你的情况,我会转储整个数据库,并使用它来恢复一个干净的版本。

 pg_dump --clean --no-owner --no-privileges dbname ## other pg_dump / psql options 

也许使用dblink并只插入你需要从select?

 http://www.postgresonline.com/journal/index.php?/archives/44-Using-DbLink-to-access-other-PostgreeSQL-Databases-and-Servers.html http://www.postgresql.org/docs/current/static/dblink.html