【发布时间】:2011-11-10 17:02:41
【问题描述】:
Flyway 是否适合在支持多个数据库的应用程序中实现?
我们不知道我们的客户使用的是什么——可能是 MySQL、Postgres 或 Oracle。我们还可以使用 Flyway 为新版本的应用程序迁移数据库吗?
【问题讨论】:
标签: flyway
Flyway 是否适合在支持多个数据库的应用程序中实现?
我们不知道我们的客户使用的是什么——可能是 MySQL、Postgres 或 Oracle。我们还可以使用 Flyway 为新版本的应用程序迁移数据库吗?
【问题讨论】:
标签: flyway
如果您的问题是:Flyway 是否提供跨其支持的数据库的 DDL 抽象层,答案是否。
这是一个有意识的设计决定,以确保底层数据库的全部功能可用,而不仅仅是迁移工具支持的最小公分母。
对于您的用例,您可以为不同的数据库提供不同的迁移脚本。不过它们应该非常相似。
如果您不希望潜在地复制迁移脚本并且可以使用 最小公分母 方法,请查看 LiquiBase,这可能会更好适合您的用例(如果您可以使用 XML)
【讨论】:
您可以使用jOOQ's parsing connection,它封装了您的目标 JDBC 连接,并且能够将您的输入 DDL 转换为任何目标方言(如果它不是太花哨和特定于供应商的话)。 Flyway 不会知道这个翻译 JDBC 代理,也不必知道。可以在这里看到SQL translator 的在线版本。例如,如果您的输入 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 背后的公司工作。
【讨论】: