如果您熟悉Javascript,将很乐意安装和使用Javascript过程语言plv8。此扩展允许您本地修改json值,例如:
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_transformset content_json = update_mapping_v8(content_json);对于MS
Windows用户:准备安装Windows二进制文件。
一个plpgsql替代解决方案使用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_transformset content_json = update_mapping_plpgsql(content_json::jsonb);


