【问题标题】:How does flyway / liquibase handle destructive upgrades in service?flyway / liquibase 如何处理服务中的破坏性升级?
【发布时间】:2013-05-19 05:45:54
【问题描述】:

根据我对 flyway/liquibase 的理解,它们提供了通过预配置脚本(SQL 查询、Java 文件等)执行数据库升级的方法。但我对以下内容不是很清楚:

  1. 如果有破坏性升级会发生什么。

    我有一个用例,例如将 bigint 列(包含数据)更改为日期类型。如果我尝试直接更改它,我最终会得到该列的损坏数据。 flyway/liquibase 如何处理这些类型的升级?

  2. 预配置的脚本是否是唯一的方式来说明 flyway/liquibase 这些是我的更改,或者是否有任何其他方式可以解决这个问题。如果有其他方式,会不会以query的形式输出diff?

如果有人阐明上述内容,将会非常有帮助。

【问题讨论】:

    标签: liquibase flyway


    【解决方案1】:

    在 Liquibase 中,您可以使用 SQL 格式化脚本来完成这项工作,我假设您尝试使用 XML 标记以避免必须执行原始 SQL 并陷入让 XML 准确翻译您的内容的失败想要做。让生活更轻松,使用 SQL 脚本并利用 Liquibase。

    【讨论】:

      【解决方案2】:

      从 Flyway 的角度讲,它从一开始就使用 sql 和 java 支持构建。如何使用其中任何一种迁移数据库是您的责任。 Flyway 会照你说的做。

      【讨论】:

      • 阿克塞尔,谢谢。根据您关于基于 java 的迁移here 的文档,看来我必须实现 jdbcMigrations 来处理破坏性升级,就像我在第一个问题中提到的那样。在这种情况下,当迁移正在进行时,我如何处理动态(新)插入/更新?飞行路线中是否有任何处理/配置可用于此处理?简而言之,flyway 是否提供任何类型的机制来处理破坏性升级,或者它只是一个框架来对配置的模式/模式执行提供的查询。
      • 没有魔法。它做你告诉它做的事情。在您的情况下,您可能应该按照这些步骤分几个步骤进行操作:以新格式添加新列,迁移数据,将代码更改为新格式和列,删除旧列。
      • 阿克塞尔,这是有道理的。因此,如何处理迁移过程中发生的插入/更新/删除操作取决于我。而且flyway没有任何处理程序/配置来支持相同的,对吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      • 2021-03-20
      • 1970-01-01
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多