给定一个包含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,