sql - 使用 jooq 将表名转换为 OID

标签 sql postgresql jooq

我需要使用 JOOQ 将表名转换为对象标识符。在普通 SQL 中我会这样做:

'my_table'::regclass::oid

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

我也玩过DSL.inline , DSL.val ,但无法获得所需的输出。

更新

我意识到有一个PostgresDSL.oid返回 Field<Long>并产生以下输出 "my_table".oid ,但我没有该表的引用(我将表名称作为文本),因此它对我的用例无效。


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

最佳答案

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

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

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

关于sql - 使用 jooq 将表名转换为 OID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64966855/

相关文章:

mysql - 通过sql查询复制行

java - org.jooq.Query.getBindValues() 返回的 List<Object> 是否包含每个查询参数的类型安全对象?

postgresql - 在没有停机的情况下将 `int` 迁移到 PostgresQL 中的 `bigint`?

java - JOOQ如何将时间戳和表示毫秒的整数相加?

java - 如何将此 SQL 查询写入 jOOQ?

SQL: "condition is not true"模式替代 "is null or not (condition)"

java SQL连接被拒绝异常

mysql - 添加外键时出错

python - 无法在 Heroku 上运行 Django/Postgres 应用程序设置

sql - 超过 50 个连接的查询速度慢吗?