database-migration - Flyway:在单个事务中运行多个迁移

标签 database-migration liquibase flyway

我一直在看Flyway作为数据库迁移工具。

我一直无法找到明确答案的一件事是:

我可以强制 Flyway 在单个事务中运行所有尚未应用的迁移,而不是让每个迁移都成为它自己的事务吗?

在开发环境中,这不是问题,但在生产环境中,您可能会执行从一次更新到下一次的多次迁移,其中一次迁移失败会使数据库处于“半迁移”状态,其中一些迁移是 promise 和一些没有 - 相当糟糕的事情。

一种解决方法是简单地将所有所需的 SQL 塞进一个文件中,但存在以下问题:

  • 生产迁移和开发迁移最终会以不同的方式执行,因为您无法提前知道开发环境中的迁移会发生什么。我想您总是可以先进行一次清理,然后再进行新的迁移,但这似乎与增量迁移方面的飞路设计精神相悖。
  • 一旦添加了新的更改,校验和就会不同。

  • Flyway 仍然不支持这样的功能吗? Liquibase 或任何其他迁移工具?

    最佳答案

    没有开箱即用的功能。不过这是一个很好的问题,我敢打赌,因为 Flyway 提供了每次迁移的事务边界,我敢打赌它被考虑过 - 希望 Axel Fontaine将加入导致这不是功能的技术/设计考虑因素。

    常见问题有thisthis关于降级/失败的说法。该政策归结为:

    Maintain backwards compatibility between the DB and all versions of the code currently deployed in production.... Have a well tested, backup and restore strategy.



    就我而言,我们已使用 Flyway 近 3 年,并遵守所引用的政策。在任何给定的部署中,我们可能会针对许多数据库运行 100 次或更多迁移,并且很高兴地说在生产中从未发生过任何不愉快的事情。这一切都归结为最大限度地减少发布过程中失败的机会。

    在此之前,我在一个小得多的项目中使用了 Liquibase,除了提供回滚程序外,我不记得有任何此类功能。

    关于database-migration - Flyway:在单个事务中运行多个迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40177556/

    相关文章:

    php - Laravel - SQLSTATE [42S22] : Column not found: 1054 Unknown column

    oracle - jhipster Oracle 数据库连接

    mysql - 更改表后更新 changeLog 文件

    spring - 使用 Liquibase 和 Spring Boot

    spring-boot - Spring 启动 : Flyway migration before mybatis initialization

    database-migration - Flyway 迁移 : [WARNING] Unable to restore connection to having no default schema

    sql - 如何更改 MSSQL 中所有表、 View 和存储过程的架构

    mysql - 错误 : Cannot find module 'sequelize/types'

    python - Django "ValueErrror: could not find common ancestor of {migrations}"

    java - 使用 Flyway 在 Quarkus 上进行响应式 hibernate