0

我希望能够获取我正在获取元数据的表具有约束的列。为了做到这一点,我必须查找columns字段的值 a Constraint(或者,在我的情况下, ),并且通过调用(或者,在 Java 中, )MutableTableConstraint检索约束。table.tableConstraintsgetTableConstraints()

但是,columns列表是否实际填充似乎取决于SchemaRetrievalOptions(或者更准确地说,取决于SchemaCrawler 源文件中的informationSchemaViews.hasQuery(CONSTRAINT_COLUMN_USAGE)方法调用的结果;似乎是以某种方式构造的),它是从参数构造的该方法与 不同,它是由用户手动构建的。retrieveTableConstraintsColumnsTableConstraintRetriever.javainformationSchemaViewsSchemaRetrievalOptionsconnectionSchemaCrawlerUtility.getCatalog()SchemaCrawlerOptions

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

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

(SchemaCrawler 版本:16.9.3)

4

1 回答 1

1

所以,问题是,有没有办法让我以编程方式影响 SchemaRetrievalOptions,包括一个选项CONSTRAINT_COLUMN_USAGE

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

  1. 如果您开发了INFORMATION_SCHEMA您认为通常对给定数据库方言有用的数据字典视图查询或其他数据字典视图查询,请向 GitHub 上的SchemaCrawler项目提交增强请求。
  2. 如果您愿意,您可以创建自定义数据库插件,将其捆绑在一个 jar 中,并使该 jar 在 SchemaCrawler 的类路径中可用。
  3. 您可以以编程方式构建InformationSchemaViews. 对于一些帮助您入门的示例代码,请参阅DatabaseInfoRetrieverTest.java如何构建它们以及SchemaCrawlerUtility.java如何使用它们。

Sualeh Fatehi,SchemaCrawler

于 2020-08-11T21:32:25.850 回答