我有一个表postgres的修改阵列元素
id int | data json
随着数据:
1 | [1,2,3,2]
2 | [2,3,4]
我想修改要删除的行阵列元件(INT)2
预期结果:
1 | [1,3]
2 | [3,4]
我有一个表postgres的修改阵列元素
id int | data json
随着数据:
1 | [1,2,3,2]
2 | [2,3,4]
我想修改要删除的行阵列元件(INT)2
预期结果:
1 | [1,3]
2 | [3,4]
As a_horse_with_no_name su在这种情况下,在他的评论中提到了正确的数据类型是int []。但是,可以改变JSON数组为int [],使用array_remove()
并将结果转换回JSON:
with my_table(id, data) as (
values
(1, '[1,2,3,2]'::json),
(2, '[2,3,4]')
)
select id, to_json(array_remove(translate(data::text, '[]', '{}')::int[], 2))
from my_table;
id | to_json
----+---------
1 | [1,3]
2 | [3,4]
(2 rows)
另一种可能是用json_array_elements()
到UNNEST阵列,消除不需要的元素和聚合结果:
select id, json_agg(elem)
from (
select id, elem
from my_table,
lateral json_array_elements(data) elem
where elem::text::int <> 2
) s
group by 1;
非常感谢。 第一个示例正常工作。 但速度有多快? =) –
第一个查询应该比第二个查询快,但比int []数据上的类似查询慢得多。 – klin
第二行应该是'[3,4]'? – kennytm
示例数据看起来更像是一个“native”数组,而不是JSON文档。这真的是JSON吗?如果是这样,你为什么要将一个普通的数组放入一个JSON文档中?对于本地数组可以使用'array_remove()' –
这真的是json –