我计划通过bash在同一台机器上从PostgreSQL 9.3.4迁移到9.5。但一个重要问题是确保两个数据库(9.3.4和9.5)完全相同。
相同意味着几乎所有内容都相同,包括管理数据和用户数据,例如表,架构,数据,用户等。迁移后,postgresql-9.3.5将被关闭。只会使用9.5。
Checksum可能有所帮助。但是如何在bash中做到这一点?还有其他方法或想法吗?感谢。
答案 0 :(得分:2)
Postgresql校验和旨在捕获磁盘损坏。系统的工作原理是为数据库中的每个物理页面计算校验和,并将其与页面一起编写。当稍后读回页面时,可以验证校验和;如果它不匹配,则基础文件已损坏。
在相同数据的两个不同实例之间,只有当两个文件具有相同顺序的相同字节时,校验和才会匹配,如果要升级则不太可能,因为新版本可能具有不同布局的内部表。即使不是这种情况,低级数据格式中也存在一定数量的非确定性,并且同一数据库的两个实例(即使具有相同版本)也不太可能是逐字节的相同。
您最好的选择可能是以某种确定性格式转储所有数据,并对其进行明确排序。然后计算一个md5sum(如果你愿意,可以计算一些其他哈希)。
另请参阅此类似问题:How to check difference between two databases in PostgreSQL?