Обновление вложенных атрибутов в столбце jsonb с результатами из подзапроса в Postgresql - PullRequest
0 голосов
/ 09 апреля 2020

Мне нужна помощь в обновлении вложенных данных в столбце 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, но я еще не понял, как добиться того, что мне нужно с этим.

Любые предложения о том, как я могу сделать эту работу, будут оценены. Спасибо !!

...