使用 jooq 将 table 名称转换为 OID
Cast table name to OID using jooq
我需要使用 JOOQ 将 table 名称转换为对象标识符。简而言之 SQL 我会这样做:
'my_table'::regclass::oid
我找不到用于转换值的数据类型(它存在 PostgresDataType.OID
,但不存在 PostgresDataType.REGCLASS
或类似的东西,而且直接使用 PostgresDataType
已被弃用)。
我也玩过DSL.inline
,DSL.val
,但无法获得想要的输出。
更新
我意识到 PostgresDSL.oid
returns Field<Long>
并产生以下输出 "my_table".oid
,但我没有 table 的参考(我将 table 名称作为文本),因此它对我的用例无效。
有没有办法通过 JOOQ 将 table 名称转换为 Postgres 对象标识符 (OID)?
经过一段时间的测试,我找到了一个可行的解决方案(不确定最好的)。
DSL.field("{0}::regclass::oid", DSL.inline(name))
通过这种方式,我们创建了一个“字段”,其中包含所有需要硬编码的转换,并将值设置为绑定。
我需要使用 JOOQ 将 table 名称转换为对象标识符。简而言之 SQL 我会这样做:
'my_table'::regclass::oid
我找不到用于转换值的数据类型(它存在 PostgresDataType.OID
,但不存在 PostgresDataType.REGCLASS
或类似的东西,而且直接使用 PostgresDataType
已被弃用)。
我也玩过DSL.inline
,DSL.val
,但无法获得想要的输出。
更新
我意识到 PostgresDSL.oid
returns Field<Long>
并产生以下输出 "my_table".oid
,但我没有 table 的参考(我将 table 名称作为文本),因此它对我的用例无效。
有没有办法通过 JOOQ 将 table 名称转换为 Postgres 对象标识符 (OID)?
经过一段时间的测试,我找到了一个可行的解决方案(不确定最好的)。
DSL.field("{0}::regclass::oid", DSL.inline(name))
通过这种方式,我们创建了一个“字段”,其中包含所有需要硬编码的转换,并将值设置为绑定。