使用 jooq 将 table 名称转换为 OID

Cast table name to OID using jooq

我需要使用 JOOQ 将 table 名称转换为对象标识符。简而言之 SQL 我会这样做:

'my_table'::regclass::oid

我找不到用于转换值的数据类型(它存在 PostgresDataType.OID,但不存在 PostgresDataType.REGCLASS 或类似的东西,而且直接使用 PostgresDataType 已被弃用)。

我也玩过DSL.inlineDSL.val,但无法获得想要的输出。

更新

我意识到 PostgresDSL.oid returns Field<Long> 并产生以下输出 "my_table".oid,但我没有 table 的参考(我将 table 名称作为文本),因此它对我的用例无效。


有没有办法通过 JOOQ 将 table 名称转换为 Postgres 对象标识符 (OID)?

经过一段时间的测试,我找到了一个可行的解决方案(不确定最好的)。

DSL.field("{0}::regclass::oid", DSL.inline(name))

通过这种方式,我们创建了一个“字段”,其中包含所有需要硬编码的转换,并将值设置为绑定。