-1

我正在使用 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 行之前检查数据库时,相应脚本上的状态为“已应用”,但在启动后,它变为“applying_up”,看起来进化每次都在一遍又一遍地开始。我怎样才能只应用“新”进化而不是从一开始就应用每一个进化?现在它很痛苦,因为当我向表中添加新列时,我还需要使用“向下”脚本来首先删除该列,并使用“向上”脚本来添加该列,但这会导致该列上的所有数据也被删除生产数据库。我错过了进化的东西吗?(对我来说,“进化”应该只在上次结束时才继续,而不是每次都从头开始)。

谢谢

4

1 回答 1

0

我的猜测是你可能已经改变了已经应用的 Evolutions sql。因此,它可能会归结为更改的步骤并自动应用。此外,进化步骤必须彼此完全相反。否则,您永远无法达到确切的数据库状态。

在生产中,您应该禁用applyDownEvolutions.default=true. 否则,正如您所说,您可能会丢失数据

于 2015-04-12T17:20:08.277 回答