2016-01-19 52 views
0

我計劃通過bash在同一臺機器上從PostgreSQL 9.3.4遷移到9.5。但是一個重要的問題是確保兩個數據庫(9.3.4和9.5)是相同的。如何在bash中驗證PostgreSQL遷移?

相同裝置幾乎一切是一樣的,包括管理數據和用戶數據,如表,模式數據,用戶,等等。遷移後,postgresql-9.3.5將被關閉。只會使用9.5。

校驗和可能有幫助。但如何在bash中做到這一點?還有其他方式或想法嗎?謝謝。

+0

定義完全相同。 –

+0

相同表示幾乎所有內容都是相同的,包括管理數據和用戶數據,如表,模式,數據,用戶等等。遷移後,postgresql-9.3.5將被關閉。只會使用9.5。 – BAE

回答

2

Postgresql校驗和旨在用作捕獲磁盤損壞的一種方法。系統通過計算數據庫中每個物理頁面的校驗和並將其寫入頁面來工作。當頁面稍後被讀回時,校驗和可以被驗證;如果它不匹配,則底層文件已損壞。

在相同數據的兩個不同實例之間,校驗和只有在兩個文件具有相同順序的完全相同的字節時才匹配,如果您要升級,則不太可能,因爲新版本可能具有不同的內部表佈局。即使情況並非如此,在低級數據格式中存在一定數量的非確定性,並且相同數據庫的兩個實例(即使具有相同版本)極不可能是字節對字節相同。

您最好的選擇可能是轉儲一些確定性格式的所有數據,並明確排序。然後計算一個md5sum(或者其他散列,如果你願意的話)。

也看到類似的問題:How to check difference between two databases in PostgreSQL?

+0

謝謝,在這種情況下,我如何確保遷移沒有錯誤 – BAE

+0

@BAE:嗯,這總是有風險:)如果您有複製設置,可以拍攝數據庫快照,然後保留一個直到您確信所有移植都很順利。在你的常規備份,副本和快照之間,你希望有足夠的能力恢復你丟失的任何東西,或多或少地在一段合理的時間內恢復。但我並不是想讓它聽起來太充實。 Postgresql升級「通常」會非常順利。如果您有複製品,我仍然會在舊版本中保留一份副本,方便幾周。 – rici

+0

@BAE:此外,您將在[DBA stackexchange](http://dba.stackexchange.com/) – rici