#json #sql-update #postgresql-9.5
#json #sql-обновление #postgresql-9.5
Вопрос:
тип столбца = jsonb
{
"article": "1215",
"availability": [
{
"currency": "usd",
"discount": {
"due_date": null,
"is_active": false,
"old_price": 3599
},
"is_available": true,
"qty": 0,
Мне нужно обновить is_available = false (в элементе первого массива), потому что кол-во = 0.
Я пытаюсь это:
UPDATE product_imp
SET data = jsonb_set(data, '{availability, 0, is_available}', 'false', false)
where product_imp.data ->> '{availability, 0, qty}'::numeric = 0
Но я получаю сообщение об ошибке:
ERROR: invalid input syntax for type numeric: "{availability, 0, qty}"
LINE 3: where product_imp.data ->> '{availability, 0, qty}'::numeric...
^
SQL state: 22P02
Character: 125
Комментарии:
1. Пожалуйста, добавьте язык, используемый для тегов вопроса (путем редактирования)). Спасибо.
Ответ №1:
В вашем коде две ошибки: оператор приведения ::
привязывается сильнее, чем ->>
оператор, поэтому Postgres пытается преобразовать '{availability, 0, qty}'
в числовое значение.
Вторая ошибка заключается в том, что вы не можете использовать ->>
для получения значения на основе пути, вам нужно использовать #>>
UPDATE product_imp
SET data = jsonb_set(data, '{availability, 0, is_available}', 'false', false)
where (product_imp.data #>> '{availability, 0, qty}')::numeric = 0
Комментарии:
1. Я использую это: «где (product_imp.data -> ‘доступность’-> 0->>’кол-во’)::int = 0» . И все работает нормально