无法更新第一个数组项

问题描述

列类型= 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