问题描述
列类型= 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,is_available}','false',false)
where product_imp.data ->> '{availability,qty}'::numeric = 0
但是我得到了错误:
ERROR: invalid input Syntax for type numeric: "{availability,qty}"
LINE 3: where product_imp.data ->> '{availability,qty}'::numeric...
^
sql state: 22P02
Character: 125
解决方法
您的代码中有两个错误:强制转换运算符::
的绑定强于->>
运算符,因此Postgres尝试将'{availability,qty}'
转换为数值。
第二个错误是,您不能使用->>
来获取基于路径的值,而需要使用#>>
UPDATE product_imp
SET data = jsonb_set(data,'{availability,is_available}','false',false)
where (product_imp.data #>> '{availability,qty}')::numeric = 0