【发布时间】:2015-02-23 03:05:34
【问题描述】:
假设我有一个名为SomeTable 的表,主键为row_id,json 数组字段名为some_json。
some_json 看起来像这样:
[{'some_key': 'some_value_1'}, {'some_key': 'some_value_2'},
{'some_key': 'some_value_3'}, {'some_key': 'some_value_4'}]
我有一个函数,它接受一个名为 values_to_remove 的文本数组参数,如下所示:
['some_value_2', 'some_value_3', etc]
我想更新some_json,方法是删除所有包含values_to_remove 数组中的文本值的json 对象。我对我需要做什么有一个粗略的想法,但不知道如何用正确的语法将它们拼凑在一起,如果没有意义,请原谅我。
这是我到目前为止所拥有的(请原谅我破坏了语法):
CREATE OR REPLACE FUNCTION remove_json_items (removal_id smallint,
values_to_remove text[])
RETURNS void AS $$
BEGIN
UPDATE SomeTable
SET some_json = array_to_json(array_remove(ARRAY(SELECT *
FROM json_array_elements(some_json)),
(SELECT *
FROM json_array_elements(some_json),
unnest(values_to_remove)
WHERE some_json->>some_key = values_to_remove.value
)))
WHERE row_id = removal_id;
END;
$$ LANGUAGE plpgsql;
实现此目的的正确解决方案是什么?谢谢。
【问题讨论】:
标签: arrays json postgresql