无法更新第一个数组项

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