作为一个例子,我有这个基本的表结构:
CREATE TABLE test (id serial, info json);
INSERT INTO test(info)
VALUES ('{
"dept":[
{
"name":"abc",
"desc":"hello",
"enabled":false
},
{
"name":"xyz",
"desc":"hello",
"enabled":false
}
]
}');
我想更新并设置"enabled":true
"name"
为"abc"
的位置。
答案 0 :(得分:1)
PostgreSQL 9.3只具有创建JSON的功能,但没有使用或修改它的功能。我之前已经面对过它,我使用了下面的2个技巧
将其投射到文本中并使用函数regexp_replace
。请参阅下面的查询
SELECT info,
regexp_replace(info::text,
'("name":"abc"[^}]+)"enabled":false',
E'\\1"enabled":true'
)::json
FROM test;
更多说明:\\1
表示搜索字符串中(
和)
之间匹配的字符。您可以找到更多信息here。
较新版本的PostgreSQL具有修改JSON的功能。因此,在较新版本中安装一个小型PostgreSQL实例,并使用“foreign table”或“dblink”功能使用主键更新数据。对于更新json
和jsonb
的功能,您可以获得更多here。
希望在这种情况下它会帮助你。