我正在使用Scala play evolutions并在application.conf中使用它。
evolutionplugin=enabled
applyEvolutions.default=true
applyDownEvolutions.default=true
此外,我在一个进化中有这个sql脚本
ALTER TABLE `User` ADD `Level` INT(10) NOT NULL DEFAULT '1',
然而,当我在PROD模式下启动Play2时,我总是会收到此错误
Duplicate column name 'Level' [ERROR:1060, SQLSTATE:42S21]
当我在启动app之前检查数据库时,play_evolutions行有状态"已应用"在相应的脚本上,但在启动后,它会变为" applied_up" ,看起来每次变革都在重复开始。我怎样才能申请" new"进化并没有从一开始就应用每一次进化?现在它的屁股很痛苦,因为当我向表中添加新列时,我还需要" down"首先删除该列的脚本和" up"用于添加此列的脚本,但这会导致生成数据库中该列上的所有数据也丢失。我错过了演变的东西吗? (对我而言,#34;进化"应该只在上次结束时才会继续,而不是每次从头开始)。
谢谢
答案 0 :(得分:0)
我的猜测是你可能已经改变了已经应用的evolutions sql。因此,它可能会转到更改的步骤并自动应用。进化步骤也必须完全相反。否则,您永远无法达到确切的数据库状态。
在制作中,您应该停用applyDownEvolutions.default=true
。否则如您所说,您可能会丢失数据