我目前正在使用下表编写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
我的错误:
列“历史”是字符变化[]但是表达式是 输入文字
感谢。
答案 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)