postgreSQL在json数组

时间:2018-01-18 08:47:35

标签: json postgresql

我目前正在使用下表编写PSQL数据库:

表A

name  | character varying(500)
data  | jsonb 

表B

height  | character varying(255)   | not null
history | character varying(255)[] | not null default '{}'::character varying[]
someField | character varying(255)[] | not null default ARRAY[]::character varying[]

现在,我必须使用COALESCE将表A上“data”列的JSON字段值插入表B的history和someField列,但没有成功。

我的查询:

INSERT INTO TABLEb (history,someField) 
SELECT 
COALESCE(i.data->>'history','{}') AS history
COALESCE(i.data->>'someField','[]') AS someField
FROM TABLEa i

我的错误:

  

列“历史”是字符变化[]但是表达式是   输入文字

感谢。

1 个答案:

答案 0 :(得分:0)

i.data->>'history'是一个文本,甚至i.data->'history'仍然是jsonb,而不是字符varying(255)[]数组。你必须聚合unnested jsonb数组才能实现这一点。

示例:

t=# with c(j) as (values('{"a":["a","b"]}'::jsonb))
, a as (select j,jsonb_array_elements_text(j->'a') ja from c)
select j, array_agg(ja) from a group by j;
         j         | array_agg
-------------------+-----------
 {"a": ["a", "b"]} | {a,b}
(1 row)