0

问题:我们有 2 个迁移文件,它们使用 postgres DB 中的函数创建了表。这些表是在一年前创建的,之后我们进行了许多新的迁移。根据我们的新标准,我们禁止表名中的单词。

示例:我们不允许将转发表命名为“_audit”。创建的表名为“abc_audit”和“def_audit”。

禁止“_audit”嵌入在创建表的最新函数中。我们不能只更改表名,因为 docker 会启动整个新数据库并运行所有迁移文件,并且只考虑阻止“_audit”表名的最新函数,并且它会使原始迁移失败。

我们如何解决这个问题?我们不想重新设定基线并失去历史。

4

1 回答 1

1

听起来您需要将此命名合规功能带入版本控制。

  • 从数据库中删除函数
  • 创建创建函数的版本化迁移
  • 为新迁移提供一个版本,以便它以正确的顺序运行
    • 如果您有V1__abc_audit.sqlV2__def_audit.sql然后V3__something_else.sql,命名您的新迁移V2_1__naming_function.sql

现在,在部署不合规的表之后,此功能将仅在部署的部分过程中存在。

对于现有的 Flyway 部署,我建议使用“乱序”配置选项。您可以执行以下操作:

  • 从数据库中删除函数
  • 设置flyway.outOfOrder为真
  • 运行迁移

“乱序”选项意味着 Flyway 将以正确的顺序运行新迁移,尽管它的版本低于当前部署的版本。

于 2019-10-09T08:37:13.683 回答