如何使用pg_dump/pg_restore更新数据库?

6
我有一个本地机器上的db0和一个远程服务器上的db1。我只想让db1db0保持最新状态。
比如我在db0中的my_table表中添加了几千行,现在我想将其插入到db1my_table表中。
所有关于pg_dump/pg_restore的文档都是关于完整恢复表的,但是,我不需要(也不想)从头删除和恢复my_table
是否有任何清晰简单的方法来制作一个文件,scp它到服务器,然后只需从中pg_restore
只需要两个命令:一个用于pg_dump,一个用于pg_restore。因为我已经看了大约两个小时的文档和教程,越来越混乱了。

1
听起来像是pg_dump和pg_restore并不是你应该使用的工具...据我所知,它们更适用于完全恢复数据库/表,而不仅仅是插入特定记录。我对解决方案很感兴趣,我想到了一种从db0文件创建临时表的方法(也许可以用COPY?),然后在临时表上执行INSERT FROM SELECT,其中记录与目标表不匹配。但可能有一些Postgres魔法会更简单。 - zyd
COPY 命令有时会在换行符上出现错误(https://stackoverflow.com/questions/38315121/solving-error-literal-newline-found-in-data-in-postgres),这就是为什么我想坚持使用 pg_restore 的原因... - Alexander Gorg
@zyd 如果您对解决方案感兴趣,请投票支持该问题,以使其更加引人注目。 - Alexander Gorg
1个回答

1
您需要使用类似于INSERT ... ON CONFLICT DO NOTHINGMERGE(可能在v12中推出),但这要求您同时访问两个表。因此,您必须使用外部表或将表转储/还原到目标数据库中的不同表中。

我正在使用这个教程:https://carlosbecker.com/posts/dump-postgres-table-inserts/ 但是,在上千条记录上操作并不容易... - Alexander Gorg
1
是的,但重复项呢? - Laurenz Albe
非常好的问题!我正在编辑输出文件,以删除重复的INSERT。 - Alexander Gorg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接