我正在使用 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、Liquibase 等数据库迁移工具与应用程序代码库集成?