【发布时间】:2021-03-07 02:23:22
【问题描述】:
我有一个带有 jOOQ 和 Postgresql 数据库的 Spring 应用程序,该数据库有一个包含以下两列的表(问题):
id (Long)
documents (jsonb[]) <- array of jsonb (not jsonb array)
文档json结构如下:
{
"id": (UUID),
"name": (String),
"owner"; (String)
}
我想要实现的是能够将具有匹配 id(通常只有一个)的文档替换为新文档。我正在为 jOOQ 甚至是普通的 SQL 苦苦挣扎。
我想我需要在 jOOQ 中编写一些简单的 SQL 才能做到这一点,但这没关系(至少)。我有一个想法来做以下事情:
- 取消嵌套文档列
- 过滤掉数组中需要更新的文档
- 附加应更新的文档
- 存储整个数组
原始 SQL 看起来像这样,但缺少要添加的新文档:
UPDATE issues SET documents = (SELECT ARRAY_AGG(doc) FROM issues, UNNEST(issues.documents) AS doc WHERE doc->>'id' != 'e4e3422f-83a4-493b-8bf9-37980d532538') WHERE issues.id = 1;
我的最终目标是在 jOOQ 中编写这个并附加要替换的文档。我正在使用 jOOQ 3.11.4。
【问题讨论】:
-
在某种程度上可以标准化吗? IE。有
create table documents (document_id uuid, issue_id bigint, document jsonb)表吗?以这种方式管理数据似乎更容易...... -
不幸的是,没有 - 对其余的应用程序和项目进度没有太大影响,但我同意你的看法......
标签: postgresql jooq