【问题标题】:How to use pg_dump/pg_restore to update database?如何使用 pg_dump/pg_restore 更新数据库?
【发布时间】:2018-11-28 19:50:42
【问题描述】:

假设我在本地机器上有db0,在远程服务器上有db1。我只想让db1db0 保持同步。

假设我在db0 中的my_table 中添加了几(千)行,现在我想将其插入到db1 中的my_table

关于 pg_dump/pg_restore 的所有配方和文档都说要完全恢复表,但是,我不需要(也不想)删除并从头开始恢复 my_table

有没有什么清晰而简单的方法来制作一个文件,scp 到服务器,然后 pg_restore 来自它?

只有两个命令:用于 pg_dump 和用于 pg_restore。因为我正在浏览文档和演练大约两个小时,发现新错误并且越来越困惑。

【问题讨论】:

  • 听起来 pg_dump 和 pg_restore 并不是你真正应该使用的......据我所知,它们实际上更多地用于完全恢复数据库/表,而不仅仅是插入特定记录。我会对解决方案感兴趣,我正在考虑从 db0 文件创建某种临时表(可能使用 COPY?),然后在记录与目标表不匹配的临时表上插入从选择。但可能有一些更简单的 postgres 魔法。
  • COPY 有时会在换行符上中断 (stackoverflow.com/questions/38315121/…),这就是为什么我想坚持使用 pg_restore...
  • @zyd 如果您对解决方案感兴趣 - 请投票,让 pg 向导更容易注意到它

标签: postgresql pg-dump pg-restore


【解决方案1】:

您必须使用INSERT ... ON CONFLICT DO NOTHINGMERGE 之类的语句(可能会出现在v12 中),但这需要您同时访问两个表。

因此,您要么必须使用外部表,要么将表转储/恢复到目标数据库中的不同表中。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2022-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
  • 1970-01-01
  • 2017-09-08
相关资源
最近更新 更多