我的一个小项目正在基于squeryl - Scala的类型安全关系数据库框架(基于JVM的语言)发布。
我预见初始部署后会有多次更新。输入数据库的数据应该保留在它们上面。如果没有某种数据迁移过程,为新的数据库模式升级数据,这是不可能的。 使用旧数据测试新代码也需要兼容性补丁。
现在我使用框架自动生成模式。它似乎只能从头开始创建模式 - 没有数据持续存在。
是否有方法允许在不完全删除自动模式生成的情况下轻松,正式地将数据迁移到更改的模式?
到目前为止,我只能看到添加列的简单方法:我们转储旧数据,为新列提供默认值,重置架构和恢复旧数据。
如何删除,重命名,更改列类型或语义?
如果模式生成对于生产数据库迁移没有用,那么传统的手动/脚本化重新部署需遵循哪些标准过程?
答案 0 :(得分:1)
在Squeryl列表上有过几次讨论。共识往往是没有真正适合每个人的最佳实践。根据您的模型更新模式的自动化过程很脆弱(无法处理列重命名等情况)并且在生产中可能很危险。就个人而言,我喜欢“迁移”的概念,其中所有的架构更改都是用SQL编写的。有一些框架可以帮助解决这个问题,您可以找到其中一些here。就个人而言,我只是在psql命令行实用程序周围使用一个轻量级包装器来进行模式迁移和数据加载,因为后者比通过JDBC提供数据要快得多。