当前位置: 首页 > 知识库问答 >
问题:

如何让flyway重新运行迁移?

白驰
2023-03-14

我们正在尝试将迁移作为.sql文件置于版本控制之下。开发人员将编写一个vn__*.sql文件,提交到版本控制,并且每5分钟运行一次的作业将自动迁移到开发和测试数据库。一旦更改被证明没有引起问题,其他人就会运行一个手动作业来在生产上运行迁移。

我的问题:

我有一个演示迁移,创建了几个表。我将v4__demotable.sql检查到PC上的版本控制中。

阅读文档时,开发人员似乎建议我应该创建一个新的v4_1_demotables.sql文件,并使用该修复程序。但是这会与V4__文件中的命令发生冲突,所以这似乎是错误的。

这是文件暗示我需要做的:

>

  • 根据SCHEMA_VERSION表,将V4__保留为“成功”迁移。

  • 共有1个答案

    冷翼
    2023-03-14

    如果迁移成功完成,但某些db对象还不是很正确(列名,...中有错误),那么按照您所说的执行,并推送一个后续脚本来修复它(重命名列,...)。

    如果迁移失败,并且没有在带有DDL事务的数据库上运行,则必须手动清理该数据库。这意味着:

    • 恢复迁移对DB的影响
    • 从SCHEMA_VERSION表中删除版本,并将以前的版本标记为当前的
     类似资料:
    • 我有一个现有的数据库。我创建了两个迁移 我在中设置了以下内容 Spring Boot1.5.6,飞道芯3.2.1 Spring文档-FlyWay文档

    • Flyway在其留档中说明了可重复迁移的一些用法: 用法:(重新)创建视图/过程/函数/包/... 我想在可重复迁移中创建一些触发器/函数,这些稍后会在版本迁移中引用,并应用到表中。 Flyway最后运行可重复的迁移,这意味着触发器在被引用时不存在。 是否可以在版本化迁移之前运行某些可重复的迁移? 是否不支持此用例,因为自动更新应用于表的触发器是不好的做法?

    • 所以我有几个可重复的迁移。 创建一个视图(删除它 现在假设我修改了第一次迁移,结果视图不再包含第二次迁移使用的列。Flyway将愉快地重新运行第一次迁移,第一个视图将被重新创建,第二个视图将由于级联选项而被删除。 在此之后,我希望第二次(依赖的)迁移也会运行,并且会抛出一个错误(因为它使用了一个不再存在的列)。 这样可能吗? 以某种方式强制flyway检查现有迁移的结果是否不再存在?或者可能存在类

    • 我们中的两个人在不同的GIT分支中制作了一个迁移脚本。现在,我已经拉动了源开发分支,并更正了 GIT 合并问题,并将我的迁移脚本重命名为最后一个。因此,数据库的新初始化和从开发分支的版本迁移数据库将是可以的。 然而,我的本地测试数据库中有很多数据,所以我手动应用了我在GIT中引入的新迁移脚本。然而,我不能让flyway认为,一切都很好。 那么,我如何才能伪造迁移? 当我尝试迁移时,我收到以下错误:

    • 我正在使用Flyway更新DB模式。当前,模式的最新版本是3(最新的迁移文件名为)。 我是否正确理解了参数,还是遗漏了什么? 注意:我知道自Spring Boot2以来,参数名称空间已经更改为,但我使用的是Spring Boot1,所以这不是问题。

    • 我刚刚在配置和充分理解flyway的过程中遇到了这样的情况: 我已成功配置新项目以使用Flyway。 我已成功将测试数据库从版本0迁移到1.0.3。 无法执行到版本1.0.4的迁移。(我试图添加已经存在的列,到目前为止没有问题,是我的错。) 但是,一旦我对相应的脚本进行了必要的更改以使其工作,flyway就会不断显示这样的消息: 由于我不想恢复一个完整的转储并再次应用每一次迁移,只是为了使alte