将数据从 jsonb 迁移到 integer[] SQL

Migrating data from jsonb to integer[] SQL

我在 Postgresql 中有 jsonb 字段(数据),其结构如下:

{ "id" => { "some_key" => [1, 2, 3] } }

我需要将值迁移到不同的字段。

t.jsonb "data"
t.integer "portals", default: [], array: true

当我尝试这样做时:

UPDATE table_name
SET portals = ARRAY[data -> '1' ->> 'portals']
WHERE id = 287766

它引发错误:

Caused by PG::DatatypeMismatch: ERROR:  column "portals" is of type integer[] but expression is of type text[]

这是一种方法。但是,如果您搜索该网站,那么您会得到更多。

架构

create table t (
data jsonb
);

insert into t values ('{"1" : { "k1" : [1,2,3,5]} }');
insert into t values ('{"2" : { "k2" : [4,5,6,7]} }');

create table i (
  id int,
  v int[]
)

一些测试

select data -> '1' -> 'k1'
from t
where data ? '1'
;

insert into i values(1,ARRAY[1,2,3]);

update i
set v = (select replace(replace(data -> '1' ->> 'k1', '[', '{'), ']', '}')::int[] from t where data ? '1')
where id = 1;

select * from i;

上面的操作与您一样,将数组作为文本获取。之后,只需进行一些文本替换即可将文本转换为 integer array literal.

DB Fiddle