postgres,使用jsonb的数组生成列



给定一个包含data列的jsonb类型的表

"body": [
{
"type": "TextualBody",
"value": "comment",
"purpose": "commenting"
},
{
"type": "TextualBody",
"value": "tag1:value",
"purpose": "tagging"
}
],

我可以运行这个查询

select array(select jsonb_array_elements(data->'body')->>'value' from table where id=1)
并得到这个结果
{comment,tag1:value}

我希望生成一个包含该结果的列text[]

我试着

tags text[] GENERATED ALWAYS AS (ARRAY(SELECT(jsonb_array_elements(data -> 'body') ->> 'value'))) STORED, 

显示错误

ERROR:  cannot use subquery in column generation expression

创建这样一个生成的列的正确方法是什么?

由于这个答案,我解决了这个函数

CREATE OR REPLACE FUNCTION tags (data jsonb)
RETURNS text[]
AS $CODE$
BEGIN
RETURN ARRAY (
SELECT
jsonb_array_elements(data -> 'body') ->> 'value');
END
$CODE$
LANGUAGE plpgsql
IMMUTABLE;

和这个存储的列

tags text[] GENERATED ALWAYS AS (tags (data)) STORED,

最新更新