通过向现有键值添加1来更新PostgreSQL JSONB键值

时间:2017-04-10 16:55:08

标签: postgresql postgresql-9.5

我在更新JSON数据时遇到错误

CREATE TABLE testTable
AS
  SELECT $${
    "id": 1,
    "value": 100
  }$$::jsonb AS jsondata;

我希望在访问许多网站后添加1,将value更新为101

UPDATE testTable
SET jsondata = JSONB_SET(jsondata, '{value}', (jsondata->>'value')::int + 1);

但是上面的一个是错误“无法将jsonb转换为int”

我的预期输出是

{
    "id": 1,
    "value": 101
}

1 个答案:

答案 0 :(得分:2)

查看jsonb_set的签名(使用\df jsonb_set

   Schema   |   Name    | Result data type |                                  Argument data types                                   |  Type  
------------+-----------+------------------+----------------------------------------------------------------------------------------+--------
 pg_catalog | jsonb_set | jsonb            | jsonb_in jsonb, path text[], replacement jsonb, create_if_missing boolean DEFAULT true | normal

你想要的是......

UPDATE testTable
  SET jsondata = jsonb_set(
    jsondata,
    ARRAY['value'],
    to_jsonb((jsondata->>'value')::int + 1)
  )
;