【问题标题】:how to verify PostgreSQL migration in bash?如何在 bash 中验证 PostgreSQL 迁移?
【发布时间】:2016-01-19 21:32:11
【问题描述】:

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

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

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

【问题讨论】:

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

标签: bash postgresql postgresql-9.3


【解决方案1】:

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

在相同数据的两个不同实例之间,校验和仅在两个文件具有完全相同的字节且顺序相同时才会匹配,如果您正在升级,则不太可能发生这种情况,因为新版本可能具有不同布局的内部表.即使不是这样,低级数据格式也存在一定程度的不确定性,同一数据库的两个实例(即使具有相同的版本)极不可能是逐字节的一模一样。

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

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

【讨论】:

  • 谢谢,在这种情况下,如何确保迁移没有错误
  • @BAE:嗯,这总是有风险的 :) 如果你设置了复制,你可以拍摄数据库的快照,然后在旧版本中保留一个副本,直到你确定所有迁移很好。在您的常规备份、副本和快照之间,您希望能够在合理的时间内或多或少地恢复丢失的任何内容。但我并不是要让它听起来太令人担忧。 Postgresql 升级“通常”非常顺利。如果您有副本,我仍然会在旧版本的副本中保留几个星期。
  • @BAE:另外,您将在DBA stackexchange 上获得有关该主题的更多专家建议
  • 感谢您的建议。问题是我们没有复制集群,不能直接升级。这就是我们需要进行迁移的原因。
  • @BAE:我明白,我强烈建议您在 DBA 网站上提问(在搜索现有问题之后)。与往常一样,您在问题中提供的信息越多(例如您的评论),你的要求越明确,你就越有可能得到一个好的答案。
猜你喜欢
  • 1970-01-01
  • 2016-10-01
  • 2015-06-16
  • 2011-02-22
  • 2019-04-11
  • 2023-03-07
  • 2016-04-13
  • 2021-09-27
相关资源
最近更新 更多