如何使用 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 值