Необходимо заменить часть jsonb_set в большом json
Подскажите, есть json вида:
[{"teacher": {"name": "Елена","surname": "Васина", "patrName": "Крыш","department": {"name": null, "Id": {"code": "9.1.4.8.6.5", "codeSystem": null, "displayName": null}}}]
мне необходимо запросом изменить code в department.id., при этом не повредив другие данные. Наткнулась на ф-цию jsonb_set, но воспроизвести ее не выходит.
Пробовала следующим образом:
UPDATE personal ps set personal_school = jsonb_set (personal_school -> 'teacher' -> 'department'-> 'Id'->'code', '"8.11.4.87"') where ps.personal_id = '877'
Выходит ошибка вида:
function jsonb_set(jsonb, unknown) does not exist
Подсказка: No function matches the given name and argument types. You might need to add explicit type casts.
personal - это таблица хранящая информацию о школьном персонале personal_school - это поле таблицы содержащий json.
Ответы (1 шт):
В вашем JSON на верхнем уровне почему-то массив из одного
элемента. Это ошибка? Если да, то вот верное использование функции
jsonb_set:
jsonb_set(perosnal_school, ARRAY['teacher', 'department', 'Id', 'code'], '"8.11.4.87"')
Если же в вашем JSON действительно массив, то в путь надо добавить индекс:
jsonb_set(perosnal_school, ARRAY['0', 'teacher', 'department', 'Id', 'code'], '"8.11.4.87"')