flyway 命令行工具 - 重新执行失败的 DDL 的选项是啥?

Posted

技术标签:

【中文标题】flyway 命令行工具 - 重新执行失败的 DDL 的选项是啥?【英文标题】:flyway commandline tool - what option to re-execute failed DDL?flyway 命令行工具 - 重新执行失败的 DDL 的选项是什么? 【发布时间】:2011-10-29 21:07:35 【问题描述】:

我使用创建表 DDL 成功运行了 v1 迁移。我将其复制到 v2 文件并运行 - 得到了预期的验证错误消息:

迁移到版本 1.0.002 com.googlecode.flyway.core.exception.FlywayException:执行语句出错 在第 1 行:创建表 people(id number(10) 主键,名称 varchar2(301)) 由 java.sql.SQLSyntaxErrorException 引起:ORA-00955: name is already used by a n 现有对象 MigrationException:迁移到版本 1.0.002 失败!请恢复备份 并回滚数据库和代码

我更正了 v2 文件并再次运行 flyway migrate。返回错误信息

当前架构版本:1.0.002 MigrationException:迁移到版本 1.0.002 失败!请恢复备份 并回滚数据库和代码

我还没有进行数据库备份的阶段 - 只是尝试执行固定的 DDL。我目前没有看到缺少 flyway clean 的解决方案。为什么 flyway 不能再次尝试执行 FAILED 版本(如果校验和已更改)?还是不应该有flyway回滚命令?

我知道我可以很好地修改代码以使其成为这种方式,但是您有什么理由选择它以这种方式运行吗?

【问题讨论】:

【参考方案1】:

简单地重新执行的问题是可能已经应用了一些更改,这将导致迁移失败

有两种解决方案:

使用支持 DDL 事务的数据库,例如 PostgreSQL、SQLServer 或 DB2 在重新应用之前对修改后的结构和元数据表执行手动清理

【讨论】:

以上是关于flyway 命令行工具 - 重新执行失败的 DDL 的选项是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在命令行中执行 flyway 回调

Flyway 命令行:无效参数:-placeholders

flyway - 校验和概念的含义

Flyway 可重复迁移 - 在版本化迁移之前执行?

当不需要迁移时,如何让 flyway.cmd 使构建失败?

rabbitmq 命令行工具 执行失败.