Я пытаюсь написать инструкцию UPDATE для добавления пар ключ-значение во вложенный путь JSON.
Прямо сейчас мой метод заключается в использовании оператора CASE.Например, если я хочу добавить пару ключ-значение {key: val} в путь a-> b1 ...
UPDATE orders SET info = jsonb_set(info, '{a}', -- adds to the a->b1 key (chain created if not exists)
CASE
WHEN info->'a' IS NULL THEN '{"b1": {"key": "val"}}'
WHEN info->'a'->'b1' IS NULL THEN jsonb_set(info->'a', '{b1}', '{"key": "val"}', true)
ELSE jsonb_set(info->'a', '{b1}', info->'a'->'b1' || '{"key": "val"}', true)
END,
true);
Вышеприведенный оператор работает ...
- Если a не существует, он создаст a с {b1: {key: val}}.
- Если a-> b1 не существует, он создаст a-> b1и установите для него значение {key: val}.
- Если a-> b1 существует, он захватит a-> b1 и добавит в него {key: val}.
, но писать и понимать утомительно.Предоставляет ли Postgres более простой способ сделать то, что я пытаюсь сделать?Учитывая путь, я хочу добавить в него одну или несколько пар ключ-значение (создание объектов в пути, если они еще не существуют).