Nếu bạn đã quen với JavaScript, bạn sẽ sẵn lòng cài đặt và sử dụng Ngôn ngữ thủ tục JavaScript plv8. Tiện ích mở rộng này cho phép bạn sửa đổi các giá trị json nguyên bản, ví dụ:
create extension if not exists plv8;
create or replace function update_mapping_v8(data json)
returns json language plv8 as $$
var len = data['mapping'].length;
for (var i = 0; i < len; i++) {
var o = data['mapping'][i];
if (o.src == 'up' && o.dest == 'down') {
o.rule_names = 'some name'
}
}
return data;
$$;
update mapping_transform
set content_json = update_mapping_v8(content_json);
Đối với người dùng MS Windows: sẵn sàng cài đặt các tệp nhị phân của Windows.
Giải pháp thay thế plpgsql sử dụng loại jsonb:
create or replace function update_mapping_plpgsql(data jsonb)
returns json language plpgsql as $$
declare
r record;
begin
for r in
select value, ordinality- 1 as pos
from jsonb_array_elements(data->'mapping') with ordinality
where value->>'src' = 'up' and value->>'dest' = 'down'
loop
data = jsonb_set(
data,
array['mapping', r.pos::text],
r.value || '{"rule_names": "some name"}'
);
end loop;
return data;
end $$;
update mapping_transform
set content_json = update_mapping_plpgsql(content_json::jsonb);