合并来自 Postgres DBs 的 2 个模式,具有不同的 flyways
Merge 2 schemas from Postgres DBs with different flyways
我目前有 2 个服务使用的 2 个数据库(我们称它们为 database/service A 和 database/service B),它们都有自己的模式。
我需要将一些表从数据库 A 迁移到数据库 B,完成后将服务 A 重新指向服务 B。我知道可以使用 pg_dump 实用程序和这似乎是“简单”的一点。
我遇到的问题是这两个服务都使用 Flyway 进行数据库版本控制,因此当我将服务 A 重新指向 DB B 时,由于校验和不匹配,有一堆迁移在同一版本号上发生冲突。
我看到 Flyway (https://flywaydb.org/documentation/command/baseline) 中有一个“基线”功能,但乍一看似乎不是我需要的。
我该如何解决这个问题?
首先考虑这个问题,直接的答案是您从 DbB 到 DbA 的迁移是通过在 DbA 中现有迁移之上的一次迁移完成的。您不要尝试在 Flyway 进程之外修改数据库。相反,您将 Flyway 流程合并到数据库更改中。 Flyway 对您引入的一组更改非常不可知。所以,您只是在现有集合中添加另一个更改。这不应导致修复或基线达到所需点。
假设 DbA 的最后一次迁移是 V6.3__XXX,我们只需将 V6.4__MigratingDbB 添加到我们的变更链中。该脚本中的内容是必要的更改集。应该可以了。
Grant 的答案绝对是最好的,但如果两个服务的数据库对象完全独立,另一种解决方案是有两个 Flyway 配置,它们引用每个服务的脚本集合,并且具有不同的历史表.问题是这两个服务之间是否存在依赖关系;来自一项服务的迁移需要知道另一项服务的当前运行状态,这可能会让您在实际执行它们时陷入困境。
我目前有 2 个服务使用的 2 个数据库(我们称它们为 database/service A 和 database/service B),它们都有自己的模式。
我需要将一些表从数据库 A 迁移到数据库 B,完成后将服务 A 重新指向服务 B。我知道可以使用 pg_dump 实用程序和这似乎是“简单”的一点。
我遇到的问题是这两个服务都使用 Flyway 进行数据库版本控制,因此当我将服务 A 重新指向 DB B 时,由于校验和不匹配,有一堆迁移在同一版本号上发生冲突。
我看到 Flyway (https://flywaydb.org/documentation/command/baseline) 中有一个“基线”功能,但乍一看似乎不是我需要的。
我该如何解决这个问题?
首先考虑这个问题,直接的答案是您从 DbB 到 DbA 的迁移是通过在 DbA 中现有迁移之上的一次迁移完成的。您不要尝试在 Flyway 进程之外修改数据库。相反,您将 Flyway 流程合并到数据库更改中。 Flyway 对您引入的一组更改非常不可知。所以,您只是在现有集合中添加另一个更改。这不应导致修复或基线达到所需点。
假设 DbA 的最后一次迁移是 V6.3__XXX,我们只需将 V6.4__MigratingDbB 添加到我们的变更链中。该脚本中的内容是必要的更改集。应该可以了。
Grant 的答案绝对是最好的,但如果两个服务的数据库对象完全独立,另一种解决方案是有两个 Flyway 配置,它们引用每个服务的脚本集合,并且具有不同的历史表.问题是这两个服务之间是否存在依赖关系;来自一项服务的迁移需要知道另一项服务的当前运行状态,这可能会让您在实际执行它们时陷入困境。