gpt4 book ai didi

flyway - 将 Flyway 集成到现有数据库中

转载 作者:行者123 更新时间:2023-12-04 09:15:06 26 4
gpt4 key购买 nike

我们从项目开始就没有使用过 Flyway。我们处于先进的发展状态。专家评审建议在我们的项目中使用 Flyway。
问题是我们也将部分服务(微服务)移到了另一个测试环境中。
正确实现 Flyway 的最佳方法是什么?要求是:

  • 在开发环境中,无需更改已经存在的架构。但是所有新脚本都应该使用 Flyway 完成。
  • 在测试环境中,无需更改已经存在的模式。但是当我们将项目从 Dev 迁移到测试时,应该使用 Flyway 自动创建测试环境中不可用的内容。
  • 当我们迁移到一个全新的环境(UAT、生产等)时,应该使用 Flyway 自动创建整个模式。

  • 从文档中,我的理解是:
  • 将开发模式(包括 DDL 和 DML)备份为 SQL 脚本文件,并提供类似 V1_0_1__initial.sql 的文件名。
  • 使用“flyway clean”清理开发数据库。
  • 基线开发数据库“飞行基线-baselineversion = 1.0.0”
  • 现在,执行“flyway migrate”,这将应用 SQL 脚本文件 V1_0_1__initial.sql。
  • 任何新脚本都应该使用更高的版本号(如 V2_0_1__account_table.sql)

  • 这是正确的方法还是有更好的方法来做到这一点?
    问题是我有一个测试数据库,其中我们有不同的数据集(Dev 和 test 中的数据不同,我想保留这两种环境中的数据)。如果是这样,当我们从Dev环境中取出DDL和DML在不同的脚本文件中分开,并在每个环境中单独应用它们时是否好?可以根据需要手动添加DML;但如果我做正确的事情有点困惑。
    提前致谢。

    最佳答案

    所以,这里实际上有两个问题。数据管理和飞行路线管理。
    在数据管理方面,是的,这应该是一个单独的事情。数据不断增长。试图从源代码管理中管理数据,而不是简单的查找表,很快就会变得非常有问题。更不用说您希望在不同环境中使用不同的数据。这也使得自动化部署变得更加困难(如果你坚持走这条路线,分支将是你的 friend ,每个数据集一个分支,然后适当部署)。
    您可以在现有项目上实现 Flyway,是的。关键是建立基线。您不必执行上面列出的所有步骤。假设您有一个现有的数据库。您必须获取定义该数据库的脚本。该单个脚本应包含所有适当的 DDL(如果需要,还应包含 DML)。按照 Flyway 标准命名。类似 V1.0__Baseline.sql 的东西。
    有了它,你所要做的就是运行:

    flyway baseline
    这将建立您现有的代码库作为起点。从那里,您只需按照命名标准创建脚本:V1.1xxx V2.0xxx V53000.1xxx。并运行
    flyway migrate
    部署适当的更改。
    唯一需要注意的是,正如文档所述,您必须确保所有数据库都与您正在创建并标记为基线的 V1.0 相匹配。当您引入新的更改并将它们迁移到位时,任何偏差都会导致错误。只要您有匹配的基线点,您就应该能够在不同的环境中处理不同的数据而不会出现问题。

    关于flyway - 将 Flyway 集成到现有数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63260288/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com