所以,我刚刚阅读并了解了Flyway
中的迁移。 我开发了一个spring-boot
项目,并将Flyway
包含在项目的POM文件中。
现在我在文件中编写了一个SQL
脚本,并将其放在项目的resources/db
文件夹中,Flyway
似乎完成了它的工作。
遗憾的是,SQL
脚本有一些错误,项目无法编译。相反,它给了我一个SQL
错误。之后,我更改了SQL
脚本并解决了错误。当我运行同一个项目时,它现在抛出一个错误,说validation checksum failed
.我检查了flyway_schema_history
,它向我显示了以前的运行脚本。
Flyway
不应该只存储那些正确且正常运行的迁移吗?因为如果我错误地在SQL
脚本中出现一些错误,我将不得不制作一个脚本并将我更正的SQL
代码复制到其中并运行它。Flyway
有这样的东西吗?
Flyway
的目的是控制数据库的版本。这只有在严格的版本控制规则的帮助下才能实现,就像每个已发布的版本都使用匹配的校验和存储一样。发布版本后,不能只是删除或操作它,因为这会影响数据库状态。
打印Flyway
validation checksum failed
错误正是操作现有和版本控制的 SQL 文件的效果。
但是 - 有一些选项可以恢复错误的SQL文件:
- 撤消上次迁移:
所以继续调用
flyway undo
这将为您提供以下结果:
Database: jdbc:h2:file:./foobardb (H2 1.4) Current version of schema "PUBLIC": 2 Undoing migration of schema "PUBLIC" to version 2 - Add people Successfully undid 1 migration to schema "PUBLIC" (execution time 00:00.030s)
(https://flywaydb.org/getstarted/undo#undoing-the-last-migration(
- 如果您仍处于早期测试阶段,您还可以浏览完整的数据库并从一个新的数据库开始......