Необходимо заменить часть 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 шт):

Автор решения: Ainar-G

В вашем 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"')
→ Ссылка