Мне нужна помощь в обновлении вложенных данных в столбце jsonb в Postgres 9.6. Я работаю со сложными вложенными данными в столбце jsonb.
Допустим, у меня есть таблица с именем my_table
с именем столбца jsonb_col
.
CREATE TABLE my_table (
id integer NOT NULL,
jsonb_col jsonb
);
В этом столбец, у меня есть данные, которые выглядят следующим образом:
{
"a": {
"text1": "Not default text"
}
}
Я хочу добавить / обновить ключ с именем "b". Внутри «b» я хочу создать новый ключ с именем «new_text» и скопировать значение из jsonb_col->'a'->>'text1'
, но только если jsonb_col->'a'->>'text1'
не равно «Текст по умолчанию». Таким образом, данные будут выглядеть так:
{
"a": {
"text1": "Not default text"
},
"b": {
"already_existing": "This text may already exist",
"new_text": "Not default text" // copied from a->>text1
}
}
С помощью оператора UPDATE SET я хочу сделать что-то вроде
UPDATE my_table
SET jsonb_col->'b'->>'new_text' = to_copy_over_text
FROM
(
SELECT id, jsonb_col->'a'->>'text1' as to_copy_over_text FROM my_table
WHERE jsonb_col->'a'->>'text1' NOT LIKE 'Default text'
) as not_default
WHERE my_table.id = not_default.id
, но с оператором SET, где я пытаюсь копаться в jsonb столбец явно недействителен. Я также думал об использовании функции jsonb_set
, но я еще не понял, как добиться того, что мне нужно с этим.
Любые предложения о том, как я могу сделать эту работу, будут оценены. Спасибо !!