2

我的一个小项目即将发布,它基于squeryl - Scala 的类型安全关系数据库框架(基于 JVM 的语言)。

我预计在初始部署后会进行多次更新。在数据库中输入的数据应该被持久化。如果没有某种数据迁移过程,为更新的数据库模式升级数据,这是不可能的。使用旧数据测试新代码也需要兼容性补丁。

现在我使用框架自动生成模式。它似乎只能从头开始创建模式 - 没有数据持续存在。

是否有方法可以在不完全放弃自动模式生成的情况下轻松、正式地将数据迁移到更改的模式?

到目前为止,我只能看到一种简单的添加列的方法:我们转储旧数据,为新列提供默认值,重置架构并恢复旧数据。

如何删除、重命名、更改列类型或语义?

如果模式生成对于生产数据库迁移没有用处,那么对于传统的手动/脚本重新部署要遵循哪些标准程序?

4

1 回答 1

1

Squeryl 列表上对此进行了多次讨论。人们普遍认为,没有适合所有人的真正最佳实践。拥有一个基于模型更新架构的自动化过程是脆弱的(无法处理列重命名等情况),并且在生产中可能很危险。就个人而言,我喜欢“迁移”的想法,在这种想法中,您的所有架构更改都被编写为 SQL。有一些框架可以对此有所帮助,您可以在此处找到其中的一些。就个人而言,我只是在 psql 命令行实用程序周围使用了一个轻量级包装器来进行模式迁移和数据加载,因为后者比通过 JDBC 输入数据要快得多。

于 2012-03-12T19:02:59.207 回答