【发布时间】:2016-10-07 07:42:40
【问题描述】:
我需要在应用程序启动时检查当前在 DB 中的 DB 模式和用于先前 JOOQ 生成的模型的模式是否相同。 我尝试使用here建议的解决方案,发现了一些问题:
- 查询所有表的技巧:此解决方案不检查列类型,仅检查表和字段名称,但我也需要检查类型。
-
MY_SCHEMA.getTables().equals(create.meta().getTables()):这里只检查架构和名称,不再检查列类型。
我尝试使用create.meta().getTables() 中提供的信息并手动进行比较,但遇到了另一个问题。在某些情况下,生成的字段和在运行时从 create.meta() 检索的字段的数据类型不匹配。
示例是 "time" timestamp without time zone DEFAULT now() 字段,它具有 length、precision、scale 值并且在运行时 JOOQ 字段中没有 defaultValue 值,但在生成的 JOOQ 字段中没有它们并且具有 @987654330 @ 代替。
JOOQ 的行为是否正确?使用create.meta() 提取的元数据和生成的模式中的元数据不能按原样用于比较。有没有其他方法可以正确地做到这一点?
用于测试:
带有 JDBC 9.4.1208 驱动程序的 PostgreSQL 9.5.3,
JOOQ 3.8.2,
Java 8
【问题讨论】:
标签: java postgresql jooq