Тема: Postgresql заміна слів в jsonb колонці
Можете підказати як можна замінити 'https://investor-bucket.s3.eu-central-1.amazonaws.com' на '/uploads', в колонці з форматом jsonb?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Бази даних → Postgresql заміна слів в jsonb колонці
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Можете підказати як можна замінити 'https://investor-bucket.s3.eu-central-1.amazonaws.com' на '/uploads', в колонці з форматом jsonb?
1. Ви просите про допомогу, але робите це без поваги (с). Надавати початковий код скріншотом, а не текстом - це без коментарів...
2. Якщо розмір значення jsonb дозволяє, тоді просто конвертуємо у varchar, далі робимо потрібну заміну за допомогою replace, далі конвертуємо назад у jsonb. Оскільки значення jsonb в тексті я не маю (див. попередній пункт), то вигадав своє.
with raw_data as (
select cast('{"tags": {"nk594127": {"ik71786": "iv678771"}}, "braille": false, "keywords": ["https://investor-bucket.s3.eu-central-1.amazonaws.com", "kef", "keh"], "hardcover": true, "publisher": "EfgdxUdvB0", "criticrating": 1}' as jsonb) as t1
),
step_1 as (
select cast(t1 as varchar) as t1a from raw_data
),
step_2 as (
select replace(t1a,'https://investor-bucket.s3.eu-central-1.amazonaws.com','/uploads') as t1b from step_1
)
select cast(t1b as jsonb) as t1c from step_2;
було:
{"tags": {"nk594127": {"ik71786": "iv678771"}}, "braille": false, "keywords": ["https://investor-bucket.s3.eu-central-1.amazonaws.com", "kef", "keh"], "hardcover": true, "publisher": "EfgdxUdvB0", "criticrating": 1}
стало:
{"tags":{"nk594127":{"ik71786":"iv678771"}},"braille":false,"keywords":["/uploads","kef","keh"],"hardcover":true,"publisher":"EfgdxUdvB0","criticrating":1}
(CTE "with" використав для кращої наочності - все можна спростити до єдиного селекту)
Дуже дякую!
В мене вийшло ось так:
UPDATE upload_file
SET formats = cast(REPLACE(cast(formats as varchar), 'https://investor-bucket.s3.eu-central-1.amazonaws.com', '/uploads') as jsonb);
Може комусь допоможе
Пан frz гарно Вам написав:
1. Ви просите про допомогу, але робите це без поваги (с). Надавати початковий код скріншотом, а не текстом - це без коментарів...
Я б хіба додав - кінцевий варіант буде залежати від багатьох моментів - розміру таблиці (таблиць), індексів, структури JSON, розміру того ж JSON і тд. Бо якщо дивитися на Ваш короткий опис, перше на що я б звернув увагу - jsonb_set для прикладу:
jsonb_set ( some_field, '{large,url}', to_jsonb ( REPLACE ( some_field -> 'large' ->> 'url', 'https://football.ua', '/uploads' ) ), FALSE )
але звісно кінцевий варіант залежить від вище перерахованих нюансів.
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися