Flyway是否适合在支持多个数据库的应用程序中实现?
我们不知道我们的客户在使用什么——可能是 MySQL、Postgres 或 Oracle。我们还可以使用 Flyway 为新版本的应用程序迁移数据库吗?
如果您的问题是:Flyway是否在其支持的数据库中提供DDL 抽象层,答案是否定的。
这是一个有意识的设计决定,以确保底层数据库的全部功能可用,而不仅仅是迁移工具支持的最小公分母。
对于您的用例,您可以为不同的数据库提供不同的迁移脚本。不过,它们应该非常相似。
如果您不希望潜在地复制迁移脚本并且可以使用最小的公分母方法,请查看可能更适合您的用例的LiquiBase (如果您可以使用 XML)
您可以使用jOOQ 的解析连接,它包装您的目标 JDBC 连接,并且能够将您的输入 DDL 转换为任何目标方言(如果它不是太花哨且特定于供应商的话)。Flyway 不会知道这个翻译 JDBC 代理,也不必知道。SQL 翻译器的在线版本可以在这里看到。例如,如果您的输入 SQL 是特定于 MySQL 的:
create table t (i int primary key auto_increment);
输出可能是:
-- Oracle
create table T (
I number(10) generated by default as identity(start with 1) not null,
primary key (I)
);
-- SQL Server
create table T (
I int identity(1, 1) not null,
primary key (I)
)
-- PostgreSQL
create table T (
I int generated by default as identity not null,
primary key (I)
)
-- PostgreSQL 9.4
create table T (
I serial4 not null,
primary key (I)
)
免责声明:我在 jOOQ 背后的公司工作。