我有一个表services
,其中有一个名为properties
的列,其类型为text
。
json
列中存储着properties
数据。
我可以像这样用json
查询psql
数据:
SELECT * FROM services WHERE properties::json->>'url' = 'www.example.com';
但是我无法使用以下查询更新json
数据:
UPDATE
services SET properties::json->>'url' = 'www.mydomain.com'
WHERE
properties::json->>'url' = 'www.example.com';
上面的UPDATE
命令生成错误:
ERROR: syntax error at or near "::"
LINE 1: UPDATE services SET properties::json->>'url' = 'www.....
如何更新url
列内的properties
字段?
我的UPDATE
命令出了什么问题?
答案 0 :(得分:2)
您应该将记录存储为JSON
而不是TEXT
,这样就不必在所有地方都进行类型转换。
如果您运行的是Postgres 9.5+,则可以使用jsonb_set
UPDATE
services SET properties = jsonb_set(properties::jsonb,
'{url}' , '"www.mydomain.com"' )::text
WHERE
properties::json->>'url' = 'www.example.com';
答案 1 :(得分:0)
我不知道您的JSON
的结构,所以我使用我的样本。
您可以使用REPLACE
函数将REPLACE
的字符串example
与domain
一起使用,然后转换为JSON
,但最好更改{ {1}}键入列properties
至text
。
REPLACE定义:
将子字符串中的所有匹配项都替换为
json
您可以在这里Demo