2013-08-30 63 views
0

我正在使用數據庫遷移插件來控制數據庫中的更改。我一直在按照本教程的要求來應用於我的項目。除了「dbm-gorm-diff」命令之外,一切似乎都可以。Grails數據庫遷移插件中的奇怪行爲

首先,我使用「grails dbm-generate-gorm-changelog changelog.groovy」命令創建了我的數據庫快照。然後我嘗試修改一個表(稱爲Person表,添加一個屬性)並運行「dbm-gorm-diff」命令。但我收到的差異文件太大了。這絕對是我的數據庫的新完整快照(包括新添加的列)!我預計該文件只是顯示了與以前的狀態相比數據庫中發生了什麼變化。

那是錯了嗎?我如何讓它按照我的預期工作(並且我認爲這是生成diff文件的正確方法)。你能幫我解決這個問題嗎? 非常感謝。

P/S:因爲我運行「DBM-GORM-diff」命令時有一些錯誤,所以我應用這個解決 https://github.com/ph4t/grails-database-migration/commit/68fff38397157740ee4d993c8bb67811a0f021bb
到數據庫遷移插件。它工作正常,但給我一個奇怪的差異文件。

回答

0

如果我是你,我會更新一個人下課後取消對其他變化:

因爲我的第一changlog.grovvy是那裏,然後刪除所有其他的是你的人 - 更新 - 更新日誌遷移腳本寫例如.groovy。

保持只有說你列修改。對於列大小的更新很奇怪,如

 varchar(20) to varchar(25) in database ,and 

     String Name 

     name(maxlenght:25) //this a change 

可能無法爲更新生成。我簡單補充

 sql('Alter table column ...') 

反思database.So更改刪除這些生成的代碼,你不理解和跟上您所做的更改。

0

如果我正確理解您的問題,我相信您可能會按順序執行這些步驟。 dbm-generate-gorm-changelog將您的域對象與數據庫進行比較,並創建初始更改日誌。運行dbm-gorm-diff而不應用更改會導致與您看到的基本相同的更改日誌。我相信你想要的生命週期是...

1)創建你的GORM對象。 2)運行dbm-generate-gorm-changelog 3)運行dbm-update來創建數據庫模式對象

然後通過更改您的域對象進行迭代。

1)修改GORM對象 2)執行命令DBM-GORM-DIFF [某些文件名] .XML -add 3)執行命令DBM-更新 4)根據需要重複。

如果你實際上並沒有從一個空的數據庫開始,而是有不同的目標讓你走到哪裏,生命週期會有所不同。

請參閱http://grails-plugins.github.io/grails-database-migration/docs/manual/guide/index.html瞭解更多詳情。