如何使用 jOOQ 更新 PostgreSQL 上复合列的单个子字段?

Posted

技术标签:

【中文标题】如何使用 jOOQ 更新 PostgreSQL 上复合列的单个子字段?【英文标题】:How to update an individual subfield for on a composite column on PostgreSQL using jOOQ? 【发布时间】:2021-12-18 11:55:13 【问题描述】:

the PostgreSQL documentation 上有一个关于如何更新复合类型的子字段的示例:

我们可以更新复合列的单个子字段:

UPDATE mytab SET complex_col.r = (complex_col).r + 1 WHERE ...;

假设我们正在使用 jOOQ 和代码生成,那将如何转换为 jOOQ 代码?

【问题讨论】:

【参考方案1】:

从 jOOQ 3.15 开始,还没有允许访问 UDT 成员的 API:https://github.com/jOOQ/jOOQ/issues/228

与往常一样,您可以使用plain SQL templating 轻松解决这个缺失的功能:

Field<Integer> r = field("(0).1", COMPLEX_TYPE.R.getDataType(), 
    MYTAB.COMPLEX_COL.getUnqualifiedName(), 
    COMPLEX_TYPE.R.getUnqualifiedName()
);

ctx.update(MYTAB)
   .set(r, r.plus(1))
   .where(...)
   .execute();

【讨论】:

以上是关于如何使用 jOOQ 更新 PostgreSQL 上复合列的单个子字段?的主要内容,如果未能解决你的问题,请参考以下文章

使用 JOOQ 更新 PostgreSQL 中的 jsonb 值

如何在 PostgreSql 上使用 Jooq 级联截断?

JOOQ - 更新新添加的列

jOOQ 内置方法生成具有完全限定的“列”名称的不确定查询

如何在 jOOQ 中转换“to_json()”PostgreSQL 函数?

使用 jOOQ 在 PostgreSQL 中进行 UPSERT