How do we migrate/update the database schema in Grails?
We've been working with Grails for a while and my Team Lead raised some questions about the Grails ORM (GORM):
- How do we maintain the database schema once we have moved to production?
- Can we update the database schema with Grails?
- If the schema is updated, will the changes be automatically reflected / does the framework take care of this?
- Is there any plugin for Grails that will allow us to update the schema without he开发者_开发问答adaches?
I recently released the official Grails plugin for database migrations - see http://grails.org/plugin/database-migration and the docs at http://grails-plugins.github.com/grails-database-migration/docs/manual/index.html
I'm working with the author of Liquibase on this, so the older liquibase plugin is now deprecated and the new one should be used since it uses the latest version of Liquibase (2.0) and is officially supported by SpringSource. See http://blog.liquibase.org/2011/01/new-standard-liquibase-plugin-grails-database-migration.html for his announcement.
Ask usage questions on the Grails User mailing list (signup from http://grails.org/Mailing+lists) or the new plugin forum at http://grails-plugins.847840.n3.nabble.com/ or email the author directly :)
Remove
dbCreate
parameter inDataSource.groovy
for your production environment - this will stop GORM from auto-updating DB schema.Sure. Use LiquiBase plugin.
GORM can do it with
dbCreate='update'
, but it's strongly not recommended. For instance, if you rename a field, GORM/LiquiBase can never determine that you have to migrate the data, and not just drop+create.In one line:
grails db-diff
to generate LiquiBase'schangelog.xml
, andgrails migrate -Dgrails.env=<whatever environment>
to apply it to respective db server.
While the "auto create" functionality is ok to get a project up and running I find liquibase the best way to keep the db up-to-date. There is a grails plugin and I believe work is under way on a DSL too.
So, create a baseline schema (you could use liquibase's generate-changelog) then make all future changes through liquibase and it will manage the updates, rollbacks and even some db interop for you. You can set your DataSource.groovy config to verify and grails will not start up if the schema does not match the domain config:
environments {
development {
dataSource {
dbCreate = "validate"
You may also be interested in the liquibase-runner plugin to run your migrations on application start.
精彩评论