Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Postgres/jOOQ替换jsonb[]元素_Postgresql_Jooq - Fatal编程技术网

Postgresql Postgres/jOOQ替换jsonb[]元素

Postgresql Postgres/jOOQ替换jsonb[]元素,postgresql,jooq,Postgresql,Jooq,我有一个带有jOOQ和Postgresql数据库的Spring应用程序,它的表有以下两列问题: id (Long) documents (jsonb[]) <- array of jsonb (not jsonb array) 我想要实现的是能够用匹配的id替换文档,通常只有一个id替换为新文档。我正在与jOOQ甚至普通SQL进行斗争 我想我需要在jOOQ中编写一些简单的SQL来实现这一点,但这至少是可以做到的。我有一个想法来做以下工作: 取消显示文档列 筛选出数组中应更新的文档 附加应

我有一个带有jOOQ和Postgresql数据库的Spring应用程序,它的表有以下两列问题:

id (Long)
documents (jsonb[]) <- array of jsonb (not jsonb array)
我想要实现的是能够用匹配的id替换文档,通常只有一个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。

您应该能够:

更新问题 设置文档= 选择数组| AGGdoc |{id:e4e3422f-83a4-493b-8bf9-37980d532538,名称:n}'::jsonb 从问题、不问题、文档到文档 其中doc->>“id”!='e4e3422f-83a4-493b-8bf9-37980d532538' 其中,issues.id=1
在不久的将来,一些常见的数组函数将添加到jOOQ中,例如,但我怀疑您现在可以离开了?

在某种程度上可以正常化吗?也就是说,是否有一个创建表documents\u id uuid、issue\u id bigint、document jsonb表?以这种方式管理您的数据似乎相当容易…不幸的是不是-不会对应用程序的其余部分和项目进度产生太大的影响,但我同意您的看法。。。
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;