如何在没有DDL脚本的情况下将Flyway添加到现有数据库?

问题描述

我目前有一个想要将Flyway添加到Kotlin的项目。我遇到的问题是,大多数文档和在线答案都表明,将Flwyay添加到现有架构的最好方法是仅使第一个脚本成为数据定义脚本。通常这是可行的,但是由于我是使用ORM动态生成sql,所以这实际上没有任何意义。有办法解决吗?

我真的只想使用Flyway添加/删除某些表中始终需要的持久性数据。我不想在ORM级别上插入它,因为如果应用程序多次运行,那么它可以在每次运行时插入数据(与Flyway相对,它只是将数据库迁移到最新构造的状态)。

解决方法

我认为表达这个问题的另一种方式是:“我可以仅将Flyway用于静态数据,而不用于架构吗?”

是的,可以。

一些信息:

  • 您不需要具有包含模式的数据定义/“基线”的第一个脚本。您可以简单地跳过它。
  • 首次对非空数据库运行Flyway时,您仍然需要运行baseline command。在您的情况下,这只会向Flyway指示可以假定存在基准架构,并且可以安全地进行迁移。 (您的基准架构是由ORM而非基准脚本部署的-完全可以,Flyway不会检查/不在乎。)
  • 您可以选择编写插入静态数据的脚本,使其具有幂等性/使用保护子句,以使它们不会两次插入数据。这样,您可以选择在ORM级别上安全使用。