SchemaCrawler Java API:向 SchemaRetrievalOptions 添加新选项

SchemaCrawler Java API: add new options to SchemaRetrievalOptions

我希望能够获取我在其上获取元数据的 table 具有约束的列。为此,我必须查找 columns 字段的值以获得 Constraint(或者,在我的例子中,MutableTableConstraint),并通过 table.tableConstraints 调用(或者,在 Java、getTableConstraints() 中)。

然而,columns 列表是否实际填充似乎取决于 SchemaRetrievalOptions(或者,更准确地说,取决于方法 [=20= 中 informationSchemaViews.hasQuery(CONSTRAINT_COLUMN_USAGE) 调用的结果] 在 SchemaCrawler 源的文件 TableConstraintRetriever.java 中;informationSchemaViews 似乎是从 SchemaRetrievalOptions 以某种方式构造的),它是从 connection 参数构造的 SchemaCrawlerUtility.getCatalog() 方法,不像 SchemaCrawlerOptions,它是由用户手动构造的。

SchemaRetrievalOptions 取决于所使用的特定数据库:如果包含 schemacrawler-postgresql 依赖项,选项将取决于该 .jar 文件的内容;并且该文件包含 postgresql.information_schema/CHECK_CONSTRAINTS.sql 等文件,这是一些检索选项的来源。

所以,问题是,我有没有办法以编程方式影响 SchemaRetrievalOptions,包括 CONSTRAINT_COLUMN_USAGE 的选项?显然 SchemaCrawler 的命令行界面可以通过使用配置文件来实现这一点,但我使用的是 Java API 和每个 DB 方言对应的 .jar 文件,我可以'我真的没有用包含我需要的 SELECT * FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE 查询的 .sql 文件手动更新 .jar(我的意思是,我可以在本地使用,但不能用于分发)。

(SchemaCrawler版本:16.9.3)

So, the question is, is there a way for me to influence, programmatically, SchemaRetrievalOptions, to include an option for CONSTRAINT_COLUMN_USAGE?

我认为有几种方法可以影响约束列的检索方式。以下是一些想法,排名不分先后:

  1. 如果您开发了 INFORMATION_SCHEMA 或您认为对给定数据库方言通常有用的其他数据字典视图查询,请向 [=32] 上的 SchemaCrawler 项目提交增强请求=].
  2. 如果愿意,您可以创建自己的 custom database plugin,将其捆绑在一个 jar 中,并使该 jar 在 SchemaCrawler 的类路径中可用。
  3. 您可以通过编程方式构建 InformationSchemaViews。有关入门的一些示例代码,请参阅 DatabaseInfoRetrieverTest.java on how to build them, and SchemaCrawlerUtility.java 了解如何使用它们。

Sualeh Fatehi,SchemaCrawler