我查看了 Flyway 示例和文档,并试图了解它在我的环境中是否有用。我不清楚以下概念细节:Flyway 如何管理数据库版本之间的更改?它显然不比较数据库生命实例(请参阅此处的答案:Can Flyway 从数据模型中找出并生成迁移文件?)
详细地说,我的设置如下所示:我在编码时创建 SQL 创建和插入脚本(自动和手动)。这意味着我的数据库的每个版本都由许多插入/创建语句表示。在我的世界中,我通过数据库工具(来自 Oracle 的 sqlplus)执行这些脚本。每次运行都会设置数据库 _from_scratch_ (!)。
我可以将这些完全相同的脚本 1 对 1 放在 Flyway 的“迁移”路径中吗?如果目标数据库比我执行的最后一个“迁移步骤”旧得多(或者安装时 Flyway 还不存在),会发生什么情况?
我从另一个 Flyway 用户那里得到了一些输入:
似乎每个“迁移”(数据库版本)都必须是手写的 SQL/Java 代码,并且只包含来自先前“迁移”数据库的“更新”。
如果这是真的,我想知道如何将其与传统编码技术一起使用:在我的世界中,SQL 语句是自动生成的,并且包含所有数据库 init/create 语句,而不仅仅是对某些先前版本的“更新”。如果我的 SQL 代码生成器可以做到这一点,那么我什至不需要像 Flyway 这样的工具 :-)。
您关于“如何处理历史比迁移脚本更长的数据库?”的问题 您需要创建一个匹配/重新创建最新数据库架构的 V1_ 迁移/sql 脚本。可以将空白数据库变成您今天所拥有的东西。使用现有的数据库工具创建/生成该 sql 脚本,然后将其放入 Flyways 迁移目录中。(并通过使用 Flyway 针对干净的数据库来测试 V1,看看您是否得到了您所期望的结果。)http://flywaydb.org/documentation/existing.html
在该时间点之后,所有更高版本都必须在您工作时添加。当您决定需要一个新表时,请在您的开发环境中编写一个新的 V*_.sql,将您的架构修改为您需要的方式。
本博客将讨论 Spring/SQL 应用程序的这种情况。https://blog.synyx.de/2012/10/database-migration-using-flyway-and-spring-and-existing-data/