【发布时间】:2009-08-03 02:50:43
【问题描述】:
我不知道在自动创建相应的数据库表之后修改域类的“标准做法”是什么。
Grails 中没有“迁移”,我无法告诉它输出它将生成的新 SQL,以便您可以将其与之前的表定义进行比较并手动发出您自己的 ALTER TABLE 命令(即我在 django 中做什么)。
我刚拿到《The Definitive Guide to Grails》这本书,它没有提及这个主题,我在 Grails 网站上找不到任何东西。
【问题讨论】:
我不知道在自动创建相应的数据库表之后修改域类的“标准做法”是什么。
Grails 中没有“迁移”,我无法告诉它输出它将生成的新 SQL,以便您可以将其与之前的表定义进行比较并手动发出您自己的 ALTER TABLE 命令(即我在 django 中做什么)。
我刚拿到《The Definitive Guide to Grails》这本书,它没有提及这个主题,我在 Grails 网站上找不到任何东西。
【问题讨论】:
如果您想显式管理 Grails 应用程序的数据库架构,我建议您查看 Grails Liquibase plugin 或 Grails autobase plugin。
【讨论】:
这是 grails 的一个弱点,我不知道如何处理它。我所做的是创建修改后的域类的副本,然后将修改后的域类的表的 SQL 模式与域类的副本生成的 SQL 模式进行比较。然后,您必须手动对原始表格进行必要的更改。我发现当域类发生变化时,诸如关系之类的事情往往会发生变化,但是诸如添加约束以强制字段为文本类型之类的事情并不总是会发生变化.......
【讨论】:
也许您应该考虑为您的应用程序创建一个独立于数据库的备份/恢复模块(可能序列化为 xml 或 json) - 这样,当您更改 db 时,您还可以修改备份/恢复,在这样旧的域数据被“升级”为新的域数据。
我喜欢 django 如何自动执行此操作,但 django 中还有更多我不明白的魔力...
【讨论】:
您也可以尝试使用“grails schema-export”命令。它会为您提供一个输出 sql,其中包含表和约束的所有创建命令。
以此为参考,您可以创建您的变更脚本。我猜这是目前最好的..
如果您找到更好的方法,请告诉我们..
【讨论】:
您应该尝试database-migration plugin,它具有良好的documentation 并得到积极维护。
【讨论】: