PostgreSQL函数中如何将jsonb数组拆分为独立行插入表中
解决方案
以下是修改后可直接运行的函数代码:
CREATE OR REPLACE FUNCTION tribal.fn_add_documents(spec jsonb) RETURNS jsonb LANGUAGE plpgsql AS $function$ BEGIN INSERT INTO documents (client, id_document) SELECT spec->>'client', jsonb_array_elements_text(spec->'documents')::uuid; RETURN '{"code": "200"}'::jsonb; END; $function$;
核心修改说明
- 类型匹配调整:原代码使用处理
json类型的json_array_elements处理jsonb入参,替换为jsonb_array_elements_text,直接返回数组元素的文本格式,减少不必要的类型转换。 - 补充client字段插入:通过
->>运算符从入参中提取client字段的文本值,和数组拆分后生成的多行数据一一对应插入。 - 字段类型适配:因为
id_document是UUID类型,将拆分得到的字符串直接转成uuid类型,符合字段定义要求。 - 返回值类型统一:原函数定义返回
json类型,实际返回值为jsonb,调整返回值类型为jsonb避免类型不兼容报错。
内容的提问来源于stack exchange,提问作者HendrisVs
相关产品推荐
相关产品推荐

