我希望能够获取我正在获取元数据的表具有约束的列。为了做到这一点,我必须查找columns
字段的值 a Constraint
(或者,在我的情况下, ),并且通过调用(或者,在 Java 中, )MutableTableConstraint
检索约束。table.tableConstraints
getTableConstraints()
但是,columns
列表是否实际填充似乎取决于SchemaRetrievalOptions
(或者更准确地说,取决于SchemaCrawler 源文件中的informationSchemaViews.hasQuery(CONSTRAINT_COLUMN_USAGE)
方法调用的结果;似乎是以某种方式构造的),它是从参数构造的该方法与 不同,它是由用户手动构建的。retrieveTableConstraintsColumns
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 和与.jar
每个 DB 方言相对应的文件,我无法真正手动更新包含我查询.jar
的.sql
文件SELECT * FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
需要(我的意思是,我可以在本地使用,但不能用于分发)。
(SchemaCrawler 版本:16.9.3)