PostgreSQL 在 JSONB 数据中查找和替换为文本

Jor*_*ash 5 sql postgresql json syntax-error sql-update

我有一些 JSONB 数据,如下所示:

content
id       fields
0        {image: 'https://olddomain.com/file.jpg'}
1        {image: 'https://oldodmain.com/file2.jpg'}
Run Code Online (Sandbox Code Playgroud)

我想对其进行查找和替换,就像它是一个文本字段一样。我试过这个:

UPDATE content SET fields::text = REPLACE(fields::text, 'https://olddomain.com', 'https://newdomain.com');
Run Code Online (Sandbox Code Playgroud)

但这会出现语法错误。

Mur*_*nik 12

强制转换的结果不是左值,并且您不能为其赋值。但是,您可以获取replace调用的文本结果并将其转换回jsonb

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

SQLFiddle