可用版本:Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13

Schema差异

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

从 jOOQ 3.13 开始,以及 解释 DDL 的能力,jOOQ 现在能够创建两个版本的模式之间的“差异”。一个例子

// We're using interpreted Meta objects. But any other type of Meta can be used, too
Meta m1 = create.meta("create table t (i int)");
Meta m2 = create.meta("create table t (i int, j int)");

// The diff is now printed in both directions:
System.out.println("-- Schema upgrade");
System.out.println(m1.migrateTo(m2));
System.out.println();
System.out.println("-- Schema downgrade");
System.out.println(m2.migrateTo(m1));

以上程序的输出是

-- Schema upgrade
alter table T add J int;

-- Schema downgrade
alter table T drop J;

差异算法可以明确地确定以下更改集

  • 目录的添加和删除
  • 模式的添加和删除
  • 表的添加和删除
  • 列的添加和删除
  • 列类型更改
  • 约束的添加、删除和重命名(包括主键、唯一键、外键和检查约束)
  • 索引的添加、删除和重命名
  • 视图的添加、删除和替换
  • 序列的添加、删除和序列标志更改
  • 域的添加、删除和属性更改
  • 同义词的添加和删除
  • 注释的添加和删除

以下更改集很难检测。可以实现一些启发式方法,但 jOOQ 尚未支持

  • 目录重命名
  • 模式重命名,以及在目录之间移动
  • 表重命名,以及在模式之间移动
  • 列重命名,以及在表之间移动
  • 视图重命名

使用此 API 的另一种方法是 https://jooq.org.cn/diff 网站。

反馈

您对此页面有任何反馈吗? 我们很乐意听取!

The jOOQ Logo