我正在使用 Flyway 数据库迁移工具。我可以存档已迁移的工件还是必须保留在当前文件夹下?

Posted

技术标签:

【中文标题】我正在使用 Flyway 数据库迁移工具。我可以存档已迁移的工件还是必须保留在当前文件夹下?【英文标题】:I am using Flyway database migration tool. Can I archive artifacts for what was migrated or they have to stay under current folder? 【发布时间】:2021-03-20 02:44:41 【问题描述】:

我正在使用 flyway 数据库迁移工具。假设我在一个文件夹下有 100 个 sql 脚本,我通过在服务器上应用来迁移它们。后来我又添加了 50 个 sql 脚本。我能否将这 100 个旧 sql 脚本移走并将它们存档到某个地方(工件或远程共享)。这样我就只能拥有 50 个新的 sql 脚本,这些脚本是当前迁移所需的。

这可能吗?还是所有的sql脚本都必须在目录下?

【问题讨论】:

【参考方案1】:

如果您可以编辑您的问题以说明您希望仅包含当前迁移的 50 个脚本的原因,这将很有用,因为这将帮助我推荐一种方法。

据我所知,您可以使用两种方法。

    为每个版本创建子文件夹,而不是在一个文件夹中包含无法管理的脚本列表。这种方法意味着所有迁移都保留在项目中,它具有诸如能够从头开始重建测试数据库(使用 flyway clean migrate)以及能够在以后重用项目以重复早期部署的优点。如果这样做,则需要使用flyway.locations 参数引用每个子文件夹。

    按照您的建议删除已运行的 sql 脚本。如果你这样做,你需要在任何目标上运行flyway baseline。此命令将确保目标不会期望低于特定版本的迁移,因此丢失的迁移文件不会混淆 flyway。

我个人的偏好是第一个选项。如果您出于某种原因不能使用它,我们很想了解原因。

【讨论】:

您还可以使用repair command 将丢失的迁移标记为“已删除”。如果您实际上只是移动了脚本,这可能会有点误导,但它仍然保留了审计跟踪。如果您愿意,也可以稍后重新引入这些脚本。 非常感谢 David Atkinson 和 Mikiel。非常感谢您的回答。这就是我正在寻找的确切答案。第一个选项是最好的,我会遵循它(为每个版本创建子文件夹)。 对于选项一,您应该能够在 flyway.location 值中使用通配符,以避免需要对所有子文件夹进行硬编码。

以上是关于我正在使用 Flyway 数据库迁移工具。我可以存档已迁移的工件还是必须保留在当前文件夹下?的主要内容,如果未能解决你的问题,请参考以下文章

从特定版本开始 Flyway 迁移

最佳实践:使用后如何修改flyway迁移脚本

尝试在 sql-server 上迁移时 Flyway 挂起

是否可以将 Flyway、Liquibase 等数据库迁移工具与应用程序代码库集成?

使用flyway迁移到Google Cloud SQL,应该复制哪些jar文件?

使用 Flyway 迁移存储过程