2013-03-13 317 views
0

好的,所以問題可能出在我的方法liquibase上,我已經在數據庫端實現了一些更改,並且我想創建更改集,所以我只需將一個新的sql文件添加到我的變更集中即可。當我嘗試運行luquibase update命令時,出現錯誤,告訴我數據庫中存在一些列。Liquibase:更新腳本(當數據庫中已經實現了一些更改時)

對我來說,正常的是,在創建changeset腳本之前,我嘗試在數據庫中添加列(即使用PhpMyAdmin)。然後我想與其他開發人員分享這些變化,所以我生成了sql(來自我的更改),將其添加到sql文件中,然後使用變更集啓動此文件。 有人可以告訴我我做錯了什麼嗎?

這個問題涉及到當我向mysql表中添加一些新列的情況,然後我創建了SQL文件白色alter_table腳本,然後運行liquibase update命令。

回答

0

請勿在數據庫中進行手動更新。所有模式更改必須使用liquibase或其他方式完成 - 就像你的情況一樣 - 你的變更集將與現有模式衝突。

+0

我知道問題來自我的sql alter的重複。所以最好的解決方案是有兩個數據庫?一個用於測試新的SQL,另一個用於部署? – user1119698 2013-03-13 14:14:54

+0

否。如果您想進行更改,請創建一個新的更改集並在本地應用。切勿手動更改數據庫。 – 2013-03-13 15:17:01

+0

本地=在我的情況下測試。我希望Liquibase能夠識別我在數據庫中的變化,並且可以將它們與變更集合在一起。不幸的是,當然,我只能使用變更集,但有時對我來說更好(特別是與相關的表)在PhpMyAdmin中創建sql。 – user1119698 2013-03-13 20:05:54

0

雖然所有對數據庫的更改都是在Liquibase完成之前完成的,但確實存在這種情況。一個是你所描述的用例。另一種方法是將修補程序應用於生產並需要合併回開發。

如果您確定已將變更集應用於環境,請考慮運行changelogSync。它會斷言所有的變更集已經被應用,並且會用適當的信息更新Liquibase元表。

雖然不理想,但我們認爲changelogSync是真實世界應用程序所必需的,有時候生活沒有按照我們的意願進行。這就是爲什麼我們確保在數據庫中清楚地公開它。我們認爲它在現實和理想主義之間達成了平衡。

相關問題