2017-04-10 49 views
1

即时得到错误更新的PostgreSQL JSONB键值,同时更新JSON数据加入1至现有的键值

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 
} 
+0

请张贴'testTable' –

+0

'testTable'包含表模式只有一列'jsondata'类型'JSONB' – Harish

+0

postgresql不应该报告'“不能将jsonb转换为int”'然后 –

回答

1

看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) 
) 
; 
+0

谢谢@ evan-carroll,它正在工作 – Harish