根据这问题及其注释,为了获得约束(我对检查约束特别感兴趣),必须执行以下操作:
.jar,如schemacrawler-postgresql或方格。detailed (或更高),如下所示:val optionsBuilder = SchemaCrawlerOptionsBuilder.builder()
.withLoadOptions(LoadOptionsBuilder.builder()
.withSchemaInfoLevel(SchemaInfoLevelBuilder.detailed())
.toOptions()
)
val options = optionsBuilder.toOptions()
val catalog = SchemaCrawlerUtility.getCatalog(dataSource.get(), options)Table.getTableConstraints()方法。我已经包含了PostgreSQL、SQLite、MySQL的PostgreSQL文件,但我只获得了PostgreSQL的约束,而对于SQLite和MySQL,结果都是空的(不仅有检查约束,而且也没有空约束,但也没有空约束;可以通过检查列是否可以直接为空,而对于check约束没有这样的API )来检索这些信息。还有什么额外的步骤我还没有考虑过吗?包括.jar for MySQL似乎有助于解决上述问题。
我的依赖关系如下:
implementation("us.fatehi:schemacrawler:16.9.3")
implementation("us.fatehi:schemacrawler-mysql:16.9.3")
implementation("us.fatehi:schemacrawler-sqlite:16.9.3")
implementation("us.fatehi:schemacrawler-postgresql:16.9.3")发布于 2020-08-11 21:21:44
我认为你做的一切都是正确的。SchemaCrawler从JDBC驱动程序和数据库的数据字典(或INFORMATION_SCHEMA视图)中获取它的信息。SchemaCrawler不会推断任何元数据。因此,在您的示例中,如果MySQL JDBC驱动程序和MySQL INFORMATION_SCHEMA报告约束都没有,SchemaCrawler将不会检索它们。在这种情况下,如果您想要找到NULL约束,最好的选择是遍历元数据并查找不可空的列。您可以为此构建实用程序方法,也可以为该实用程序提交SchemaCrawler增强请求。对于如何获得检查约束,如果JDBC驱动程序和数据字典视图都没有报告约束,我没有很好的建议。
Sualeh Fatehi,SchemaCrawler
https://stackoverflow.com/questions/63346650
复制相似问题