无法更新第一个数组项
Can't update first's array item
列类型 = jsonb
{
"article": "1215",
"availability": [
{
"currency": "usd",
"discount": {
"due_date": null,
"is_active": false,
"old_price": 3599
},
"is_available": true,
"qty": 0,
我需要更新 is_available = false,(在第一个数组的项目中)因为 qty = 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
您的代码中有两个错误:转换运算符 ::
的绑定强于 ->>
运算符,因此 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
列类型 = jsonb
{
"article": "1215",
"availability": [
{
"currency": "usd",
"discount": {
"due_date": null,
"is_active": false,
"old_price": 3599
},
"is_available": true,
"qty": 0,
我需要更新 is_available = false,(在第一个数组的项目中)因为 qty = 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
您的代码中有两个错误:转换运算符 ::
的绑定强于 ->>
运算符,因此 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