PostgreSQL Найти и заменить в данных JSONB как текст - PullRequest
0 голосов
/ 24 июня 2018

У меня есть некоторые данные 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 голосов
/ 24 июня 2018

Результат приведения не является l-значением, и вы не можете присвоить ему значение.Однако вы можете взять текстовый результат вызова replace и привести его обратно к jsonb:

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

SQLFiddle

...