PostgreSQL以文本形式在JSONB数据中查找和替换

时间:2018-06-23 21:15:46

标签: sql json postgresql sql-update syntax-error

我有一些看起来像这样的JSONB数据:

content
id       fields
0        {image: 'https://olddomain.com/file.jpg'}
1        {image: 'https://oldodmain.com/file2.jpg'}

我想查找并替换它,就好像它是文本字段一样。我尝试过:

UPDATE content SET fields::text = REPLACE(fields::text, 'https://olddomain.com', 'https://newdomain.com');

但这会出现语法错误。

1 个答案:

答案 0 :(得分:2)

强制转换的结果不是l值,因此您无法为其分配值。但是,您可以获取replace调用的文本结果并将其转换回jsonb

UPDATE content 
SET    fields = 
       REPLACE(fields::text, 'https://olddomain.com', 'https://newdomain.com')::jsonb;

SQLFiddle