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

设置新基线后更改飞行路线迁移文件

堵凯
2023-03-14

我在我的一个项目中集成了flyway。我有很多迁移,迁移一个新的空数据库需要很长时间,主要是因为在迁移过程中也添加了种子数据。现在我想改变这一点。不幸的是,这些迁移已经被推到生产环境中(是的,在某个时候种子数据也被迁移到了那里)。

我的想法是为当前版本的生产系统设置基线,然后清理旧的迁移:压缩模式迁移并将种子和测试数据移动到未部署到生产中的新位置。

现在我的问题是:

  1. 如何在生产数据库中设置基线,而不会影响所有其他数据库?直接在数据库上调用飞行路线基线...或者我可以使用任何类型的特殊迁移文件吗?也许将基线行直接写入数据的schema_version表?这样的查询会是什么样子?
  2. 我的最新迁移是V4_6_3__....所以我的基线需要V5__...?还是V4__...,并且包含具有相同主要版本的所有迁移?
  3. 设置基线后,是否可以/保存添加、编辑和删除早于基线的迁移,而不会在下一个迁移任务中破坏我的生产数据库?

抱歉的基本问题,但它似乎在我看来,飞路留档是没有任何帮助……

提前谢谢!

共有2个答案

桂德义
2023-03-14

我经历了一个非常相似的场景,甚至编写了我们自己的内部工具,称为“Rebaser”,它可以完成您想要的大部分工作。我们的主要动机是从Flyway 3.x升级到4.3,但我们也有一段需要压扁的历史。它的要点是这样的:

    < li >将所有迁移压缩成有意义的数量。我通常有一个< code>V2__base_ddl.sql和< code > V3 _ _ base _ data . SQL (Flyway可以使用前几个版本号来创建模式等)。这是手动部分。 < Li > rebase工具检测到旧的< code>schema_version表并将其删除。 < li >然后,rebase tool使用新的基线版本集运行< code > init < code > migrate 。 < li>Rebase tool会留下一个足迹(自定义表中的Rebase键),表示它已经完成。

对于我的集成测试版本(启动一个普通的数据库并向前迁移到最新版本),我使用Flyways位置参数添加了一个额外的测试数据SQL脚本文件夹,从而确保我有集成测试的测试数据,但没有任何非测试环境。

我们的Rebaser只是围绕<code>Flyway</code>Java API的一个薄薄包装,如果配置了rebase,则在prestep中添加,然后将其委托给Flyway。

Flyway没有重新设置基址的概念,但我们发现这是必要的,因为您的历史记录越来越大,并且包含过时的数据/DDL。到目前为止,这个系统运行得很完美。

闽涵蓄
2023-03-14

对迟到的答案很严厉。我做了一个与@markdsievers建议非常相似的事情:

我保证生产环境至少是版本< code > X (< code > fly way . set target(X))。然后,我切换到一个新的模式版本表(< code > flyway . settable(' temporary _ schema _ version ')),并运行一次迁移,删除了旧表。之后,我将模式版本表改回原来的版本,将基线设置为版本< code>Y

现在我可以编辑/压缩/删除版本低于Y的所有迁移,而不会使我的生产部署崩溃。

 类似资料:
  • 我更改了一个错误的flyway脚本,这使我的迁移处于错误状态(我有5个脚本版本,但当我运行我的应用程序时,它从第4个开始,并得到一个错误“反应已经存在”)。我尝试从flyway cli使用clean,但它没有完全解决问题...此外,当我尝试将我的分支推送到git时,CI/CD管道将无法进行迁移。既然我在开发环境中,全部删除迁移脚本会是一个可怕的想法吗?删除所有脚本是否允许我在开发环境中“从头开始”

  • 我们使用Liquibase,现在在新项目中,我们必须使用Flyway。在liquibase中,迁移顺序在xml文件中,所以您可以指定什么是第一次迁移,什么是第二次迁移,它不依赖于名称。 所以,当一些开发人员添加新的迁移时,如果之前有人推动了新的迁移,那么他将在Git中遇到冲突,并且必须修复顺序。 这是如何在Flyway中实现的?如果并行添加迁移,如何控制顺序?

  • 目前正在使用flyway来版本数据库脚本。我正处于我想要基线数据库版本(版本10)的位置,这样当我迁移新脚本时,它不会扫描/验证以前的脚本。 我尝试了以下陈述: 但是,当我尝试运行此语句时,我得到以下错误: 是否有人能够提供我无法对现有数据库进行基线设置的任何原因(即使Flyway基线设计用于对现有数据库进行基线设置-查看文档)? 如有任何建议,不胜感激 谢谢

  • 在类路径中:/db。迁移有迁移但flyway没有看到这一点,而是爱上了msg 2022-05-02 17:28:07.993INFO 45296 --- [ restartedMain]c. c. c. ConfigServiceProperty tySourceLocator:从服务器获取配置,地址为:http://localhost:8888/story2022-05-02 17:28:08.

  • 有没有办法告诉flyway在不应用迁移的情况下重新创建flyway表。例如,查看迁移文件夹中的脚本,假设它们都已应用,并简单地确保flyway表包含所有脚本。 我们的方案是,我们不允许在生产和(ISO;银行、认证)原因。规则说我们需要完全删除表。因此,当我们从生产副本重置测试环境时,我们需要重新创建飞行道表。现在,我们从现有的测试环境中复制和粘贴,但有时这与生产不同步,并且会发生各种问题。 因此,

  • 我为命令行java迁移执行了以下步骤: < li >创建java文件 当我执行迁移逗号时,它会像 警告:无法解析位置类路径:db/迁移 请查看下面的附件图片,它实际上是罐子。我已经提取了更多信息。