如何在 bash 中验证 PostgreSQL 迁移?

how to verify PostgreSQL migration in bash?

我计划在 bash 前在同一台机器上从 PostgreSQL 9.3.4 迁移到 9.5。但一个重要的问题是确保两个数据库(9.3.4 和 9.5)相同。

相同意味着几乎所有内容都相同,包括管理数据和用户数据,例如 table、架构、数据、用户等。迁移后,postgresql-9.3.5 将关闭。只会使用 9.5。

校验和可能会有所帮助。但是如何在bash中做到呢?还有其他方法或想法吗?谢谢

Postgresql 校验和旨在作为一种捕获磁盘损坏的方法。该系统的工作原理是计算数据库中每个物理页面的校验和,并将其写入页面。稍后读回页面时,可以验证校验和;如果不匹配,则基础文件已损坏。

在相同数据的两个不同实例之间,只有当两个文件具有完全相同的字节且顺序相同时,校验和才会匹配,如果您正在升级,这是不太可能的,因为新版本可能有内部表不同的布局。即使不是这种情况,low-level 数据格式中也有一定数量的 non-determinism,并且同一数据库(即使具有相同版本)的两个实例极不可能 byte-for-byte 相同。

最好的办法可能是以某种确定性格式转储所有数据,然后明确地对其进行排序。然后在其上计算一个 md5sum(或者如果您愿意,可以计算其他一些哈希值)。

另见类似问题:How to check difference between two databases in PostgreSQL?