6

Flyway是否适合在支持多个数据库的应用程序中实现?

我们不知道我们的客户在使用什么——可能是 MySQL、Postgres 或 Oracle。我们还可以使用 Flyway 为新版本的应用程序迁移数据库吗?

4

2 回答 2

8

如果您的问题是:Flyway是否在其支持的数据库中提供DDL 抽象层,答案是否定的。

这是一个有意识的设计决定,以确保底层数据库的全部功能可用,而不仅仅是迁移工具支持的最小公分母。

对于您的用例,您可以为不同的数据库提供不同的迁移脚本。不过,它们应该非常相似。

如果您不希望潜在地复制迁移脚本并且可以使用最小的公分母方法,请查看可能更适合您的用例的LiquiBase (如果您可以使用 XML)

于 2011-09-07T10:45:09.583 回答
0

您可以使用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 背后的公司工作。

于 2021-08-20T07:49:00.767 回答