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
?
我认为有几种方法可以影响约束列的检索方式。以下是一些想法,排名不分先后:
- 如果您开发了
INFORMATION_SCHEMA
或您认为对给定数据库方言通常有用的其他数据字典视图查询,请向 [=32] 上的 SchemaCrawler 项目提交增强请求=].
- 如果愿意,您可以创建自己的 custom database plugin,将其捆绑在一个 jar 中,并使该 jar 在 SchemaCrawler 的类路径中可用。
- 您可以通过编程方式构建
InformationSchemaViews
。有关入门的一些示例代码,请参阅 DatabaseInfoRetrieverTest.java
on how to build them, and SchemaCrawlerUtility.java
了解如何使用它们。
Sualeh Fatehi,SchemaCrawler
我希望能够获取我在其上获取元数据的 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
?
我认为有几种方法可以影响约束列的检索方式。以下是一些想法,排名不分先后:
- 如果您开发了
INFORMATION_SCHEMA
或您认为对给定数据库方言通常有用的其他数据字典视图查询,请向 [=32] 上的 SchemaCrawler 项目提交增强请求=]. - 如果愿意,您可以创建自己的 custom database plugin,将其捆绑在一个 jar 中,并使该 jar 在 SchemaCrawler 的类路径中可用。
- 您可以通过编程方式构建
InformationSchemaViews
。有关入门的一些示例代码,请参阅DatabaseInfoRetrieverTest.java
on how to build them, andSchemaCrawlerUtility.java
了解如何使用它们。
Sualeh Fatehi,SchemaCrawler