【问题标题】:How to add Flyway to an existing database without a DDL script?如何在没有 DDL 脚本的情况下将 Flyway 添加到现有数据库?
【发布时间】:2021-02-20 20:36:21
【问题描述】:
我目前有一个 Kotlin-Exposed 项目,我想将 Flyway 添加到其中。我遇到的问题是,大多数在线文档和答案都表明,将 Flwyay 添加到现有模式的最佳方法是将第一个脚本作为数据定义脚本。这通常会起作用,但由于我使用 ORM 动态生成我的 SQL,所以这没有任何意义。有没有办法解决这个问题?
我真的只是想使用 Flyway 来添加/删除我在某些表中总是需要的持久数据。我不想在 ORM 级别插入它,因为如果应用程序运行多次,那么它可以在每次运行时插入数据(与 Flyway 相反,它只会将数据库迁移到最新构建的状态)。
【问题讨论】:
标签:
flyway
kotlin-exposed
【解决方案1】:
我认为这个问题的另一种说法是:“我可以将 Flyway 仅用于静态数据,而不是架构吗?”
是的,你可以。
一些信息:
- 您不需要拥有包含模式的数据定义/“基线”的第一个脚本。您可以直接跳过。
- 首次针对非空数据库运行 Flyway 时,仍需要运行 baseline command。在您的情况下,这将简单地向 Flyway 表明它可以假设基线模式存在并且运行迁移是安全的。 (您的基线架构是由 ORM 而不是基线脚本部署的——这完全没问题,Flyway 不会检查/不在乎。)
- 您可以选择编写以幂等方式插入静态数据的脚本/使用保护子句,这样它们就不会插入数据两次。如果您愿意,那么在 ORM 级别使用它是安全的。