将数据从 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
.
我在 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
.