如何在flyway中编辑现有的sql文件

Posted

技术标签:

【中文标题】如何在flyway中编辑现有的sql文件【英文标题】:How to edit the existing sql file in flyway 【发布时间】:2019-12-24 09:04:16 【问题描述】:

我正在使用 flyway Db 迁移,我已经下载 flyway zip 文件夹并放入我的本地计算机。

我在sql 文件夹中有两个文件,即V1__Create_person_table.sqlV2__Add_people.sql

飞行路线信息

Boxfuse 的 Flyway 社区版 5.2.4 数据库:jdbc:h2:file:./foobardb (H2 1.4)

架构版本:>

+-----------+---------+---------------------+------+--------------+---------+
| Category  | Version | Description         | Type | Installed On | State   |
+-----------+---------+---------------------+------+--------------+---------+
| Versioned | 1       | Create person table | SQL  |              | Pending |
| Versioned | 2       | Add people          | SQL  |              | Pending |
+-----------+---------+---------------------+------+--------------+---------+

Flyway 迁移

Boxfuse 的 Flyway 社区版 5.2.4 数据库:jdbc:h2:file:./foobardb (H2 1.4) 成功验证 2 次迁移(执行时间 00:00.020s) 正在创建架构历史记录表:“PUBLIC”.“flyway_schema_history” 架构“PUBLIC”的当前版本:> 将架构“PUBLIC”迁移到版本 1 - 创建人员表 将架构“PUBLIC”迁移到版本 2 - 添加人员 成功将 2 次迁移应用到架构“PUBLIC”(执行时间 00:00.092 秒)

飞行路线信息

Boxfuse 的 Flyway 社区版 5.2.4 数据库:jdbc:h2:file:./foobardb (H2 1.4)

架构版本:2

+-----------+---------+---------------------+------+---------------------+---------+
| Category  | Version | Description         | Type | Installed On        | State   |
+-----------+---------+---------------------+------+---------------------+---------+
| Versioned | 1       | Create person table | SQL  | 2019-08-19 12:12:40 | Success |
| Versioned | 2       | Add people          | SQL  | 2019-08-19 12:12:40 | Success |
+-----------+---------+---------------------+------+---------------------+---------+

现在,这里的问题是:如果我想更新或编辑以上两个 sql 文件中的某些内容,我该怎么做,我应该编辑现有文件版本 1、版本 2 和 保存文件并再次运行上述所有命令?

【问题讨论】:

Repeatable Migrations 每次校验和更改时都会(重新)应用,例如:R__Add_new_table.sql 【参考方案1】:

您不应编辑现有脚本。我必须添加一个新的,例如V3__Update_person_table.sql 并正确更新它。

附言

在大项目中,我们有几十个脚本迭代修改空数据库以达到当前状态。

之后,通常,当移动到下一个版本时,我们会将所有现有的脚本合并为一个或两个(当我们不再需要保留历史时)。

备注

这是正确的。我们不会更改现有脚本(这是 CI/CD 的一部分)。应使用新脚本额外添加所有更改。 Flyway 接受包含所有脚本的目录。

【讨论】:

感谢您的快速响应,我创建了 V3 (Add_People) 版本的新文件,我运行了 flyway info cmd - 检查状态,现在是 sql 文件的状态。 版本化 | 3 |添加人员 | SQL | |待办的。现在我有另一个问题,如果我错了,请纠正我,正如你所说,如果以前执行的文件有任何更改,我们必须创建具有最新版本的新文件,在实时项目中我们如何集成所有文件以及如何到我在测试环境中部署。 @oleg.cherednik,发布后,你的意思是合并用flyway迁移的增量脚本吗? @oleg.cherednik,我的意思是这听起来只有当你清理历史表时才合理,对吧? 是的。在这种情况下,您需要清理方案表。但是,如果应用所有脚本的时间对您的项目来说没有问题,那么将它们全部保留

以上是关于如何在flyway中编辑现有的sql文件的主要内容,如果未能解决你的问题,请参考以下文章

新的 Flyway 迁移破坏了现有的 jOOQ 生成的代码

如何在 VS2008 和 SQL Server CE 上基于现有的 .sdf 文件创建空本地数据库

Flyway Migrate [SQL] - 处理对象依赖关系

如何将多个sql脚本执行到具有相同版本的flyway中

如何在现有的 Hql 或 SQL 查询中应用“With UR”子句?如何在我的查询为字符串格式的 Java 文件中附加它

如何从 Flyway 迁移名称中删除前缀?