我們一直在我們的webapp中使用liquibase 3.0.8一段時間,數據庫更新由Spring-liquibase bean在應用程序啓動時應用。 我們決定通過3.1,3.1.1,3.2.0和3.2.3逐步更新我們的開發數據庫,此時更新失敗並出現校驗和驗證錯誤。我們嘗試恢復到3.2.0,但得到一組不同的校驗和錯誤。 我也試過(在寫作時當前版本)從3.0.8直接去3.4.1,並得到同樣的校驗和錯誤,liquibase changeset onupdating 3.2.3
我明白從liquibase發行說明,有一個錯誤在3.2 .0計算出的校驗和不正確,但我沒有選擇在生產數據庫中將受影響的校驗和設置爲NULL,因爲我們的webapp部署在我們無權訪問的客戶服務器上。
下面是一個更改集的示例,其校驗和在將liquibase更新爲晚於3.2.0的任何版本時失敗。
<changeSet author="xxxxx" id="16042015">
<preConditions onFail="MARK_RAN">
<sqlCheck expectedResult="0">select count(*) from Organisation</sqlCheck>
</preConditions>
<comment>Add Organisation table</comment>
<loadData tableName="Organisation" file="sqlUpdates/data/organisations.csv">
<column name="id" type="NUMERIC" />
<column name="title" type="STRING"/>
<column name="approved" type="NUMERIC"/>
</loadData>
會在這裏欣賞到解決這個問題的最好辦法的任何建議。這裏是我們目前的想法,所有這些都有明顯的缺點:
1)我們可以創建一個新的變更集文件,在任何其他文件之前運行,包含一個變更集,在更新開始之前將所有校驗和設置爲null,以停止錯誤首先發生。這遠非理想,因爲我們不再能夠確定真的已被改變。
2)告訴客戶執行一些SQL語句,以將相關的變更集校驗和設置爲空 - 這還遠非理想,因爲我們的許多客戶不擅長MySQL,可能會搞砸了。
3)不要在所有更新liquibase,並與最新的堅持3.1版本 - 同樣不理想
謝謝! Richard
什麼說的SQL:與OPTION updateSQL –