首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从JSON填充嵌套复合类型并插入到表中

如何从JSON填充嵌套复合类型并插入到表中
EN

Stack Overflow用户
提问于 2017-09-22 15:11:13
回答 1查看 788关注 0票数 0

我正在尝试将复杂的JSON转换为复合类型。下面是一个例子

代码语言:javascript
复制
CREATE TYPE ty as(a int, b int[]);

CREATE TABLE ta(ab ty[]);

INSERT INTO ta(ab) values(ARRAY[ROW(1, ARRAY[1, 1])::ty, ROW(2, ARRAY[2, 2])::ty]);

select * from ta;
            ab                 
-----------------------------------
{"(1,\"{1,1}\")","(2,\"{2,2}\")"}
(1 row)

这个很好用。

现在,我试图将JSON数组插入到表中,方法是先将JSON数组填充到复合类型中,然后插入它。PostgreSQL函数正在抛出一个奇怪的错误。

代码语言:javascript
复制
INSERT INTO ta(ab) values (json_populate_recordset(null::ty[], '[{"a":3,"b":[3,33]},{"a":4,"b":[4,44]}]'));
ERROR:  first argument of json_populate_recordset must be a row type

INSERT INTO ta(ab) values (json_populate_recordset(null::ty, '[{"a":3,"b":[3,33]},{"a":4,"b":[4,44]}]'));
ERROR:  column "ab" is of type ty[] but expression is of type ty
LINE 1: INSERT INTO ta(ab) values (json_populate_recordset(null::ty,...
                                   ^
HINT:  You will need to rewrite or cast the expression.

这只是我正在分享的一个示例,实际的JSON是从其他几个函数中生成的。因此,我需要修复JSON,然后将其作为复合类型插入到表中。其中一个非常接近但不被插入的是:

代码语言:javascript
复制
INSERT INTO ta(ab) values (json_populate_recordset(null::ty, '[{"a":3,"b":"{3,33}"},{"a":4,"b":"{4,44}"}]'));
ERROR:  column "ab" is of type ty[] but expression is of type ty
HINT:  You will need to rewrite or cast the expression.

注意如何将数组转换为PostgreSQL喜欢的与JSON兼容的数组,但由于存在类型转换问题,这仍然无法工作。

所以,我真的很想解决两个问题:-

  1. 如何将JSON转换为json_populate_recordset喜欢的兼容JSON,即将复杂的JSON序列化为类型(在本例中为ty)。
  2. 如何在尝试转换和插入类型数组时解决类型强制转换问题。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-22 15:53:58

jsonb_to_recordset构建类型和聚合

代码语言:javascript
复制
insert into ta (ab)
select
    array_agg((
        a,
        (select array_agg(e::int) from jsonb_array_elements_text(b) jae(e))
    )::ty)
from jsonb_to_recordset(
    '[{"a":3,"b":[3,33]},{"a":4,"b":[4,44]}]'
) as v(a int, b jsonb)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46367940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档