2010-12-06 270 views
2

假設我有含有Grails應用程序3個表的數據庫: 用戶 活動 朋友數據庫遷移

用戶表表具有一對多關係到活動和朋友表,以便在用戶表我有:

static hasMany = [activies: Activity, friends: Friend] 

並在朋友和活動,我有:

static belongsTo User. 

應用已經部署,並表示成千上萬的客戶已經註冊。現在在數據庫中進行更改:表活動被刪除。在用戶表的許多方面創建一個表日誌。用戶表中添加了一個新列,並且此列不能爲空。 Friend表中的舊列被刪除,該列也被定義爲非空。

因此,給出上述情況並假定使用MySQL需要做什麼才能做出上述更改而不刪除現有客戶數據並安全地將新表添加到現有客戶?

Ruby on Rails自帶ActiveRecord進行數據庫遷移。 Grails是否帶有這樣的盒子?

當前在開發中,當我向表中添加一個新的非空列後運行我的grails應用程序時,我得到的列不能爲null拋出異常,除非我在運行grails應用程序之前刪除數據庫中的表,如果它會重新創建表if不存在。顯然,一旦部署了應用程序,我不會奢望刪除表格。

回答

2

不幸的是,當前版本的Grails沒有附帶數據庫遷移。但是,有一個plugin for Liquibase可以進行遷移。

next version of Grails(1.4,計劃於2011年第一季度)應該包含一個內置的遷移工具,我非常期待。

注:我沒有使用Liquibase插件,所以我沒有任何第一手的經驗。然而,我已經看到許多博客文章描述它的使用,如果1.4版本還沒有出現,我可能會在我的下一個Grails項目中使用它。

+2

Grails遷移支持將是一個插件,並在1.4之前發佈。它基於Liquibase,所以如果你開始使用它,現在切換到使用Grails插件將會很簡單。 – 2010-12-06 18:59:20