我有一个 postgresql 数据库,它丢失了一些记录。我想从几天前获取数据库的 pg_dump SQL 转储并将其与当前生产数据库合并。许多记录将是重复的,因此它可以跳过重复项。最好的方法是什么?
答案1
patch
可能是你的朋友可以尝试创建一个新的转储,我们将其称为 current_dump 并diff
针对 old_dump 进行操作,然后使用
diff old_dump new_dump > patch.input
(copy the new_dump) to another file at this point new.db.dump)
patch new.db.dump patch.input
您可能必须在进行差异分析之前对转储文件进行排序,并且根据数据库的大小,这可能并不实用。
还要非常小心并根据备份执行此操作,直到您确定它是正确的。
否则,也许有 ETL 类型的工具可以做到这一点。
答案2
不知道您正在使用哪种转储(普通、tar 还是自定义)...
如果您有可用的 dblink,那么您可以恢复到不同的数据库并将数据拉到生产箱。
一个更复杂的解决方案可能是
- 将转储还原到另一个数据库,
- 更改架构/表名称,使其不与生产数据库中的任何内容冲突,
- 转储重命名的表并使用该转储将重命名的表放入生产数据库。
- 完成所有操作后,您就可以使用纯 SQL 来查找/插入丢失的数据。