возникает ошибка глубокого вложенного обновления jsonb_set, в которой говорится, что ни одна функция не соответствует заданному имени и типам аргументов

#postgresql #jsonb

Вопрос:

Получите вложенный объект.

 select jdoc -> 'members' ->'coach'  from api where id = 22;
 

ВОЗВРАТ :
{«Идентификатор»: 11, «имя»: «Чувак»}

попытка обновить вложенный объект, но не удалась.

 update api set jdoc = jsonb_set(jdoc, '{members,coach,id}', 21) where id = 22;
 

Ошибка:

 No function matches the given name and argument types. You might need to add explicit type casts.
 

Так в чем же я ошибся? столбец jdoc, очевидно, является столбцом jsonb.
Руководство по эксплуатации: select jsonb_set('[{"f1":1,"f2":null},2,null,3]'::jsonb, '{0,f1}', '[2,3,4]', false)

Ответ №1:

Третьим параметром должно быть значение JSONB:

 jsonb_set(jdoc, '{members,coach,id}', to_jsonb(21))
 

Комментарии:

1. Это работает. jsonb_set(jdoc, ‘{участники,тренер,идентификатор}’, ’22’). Я предполагаю, что для числа добавление одинарной кавычки сделает его значением jsonb. Для струн. нам нужна сначала двойная цитата, а затем одинарная, например '"string"' . в любом случае, to_jsonb сделает все это намного проще.