在 postgres 中更新 jsonb 对象

Sid*_*hal 5 sql postgresql json sql-update jsonb

我的专栏之一是 jsonb 并且具有格式价值。单行列的值如下。

{
    "835": {
        "cost": 0, 
        "name": "FACEBOOK_FB1_6JAN2020", 
        "email": "test.user@silverpush.co", 
        "views": 0, 
        "clicks": 0, 
        "impressions": 0, 
        "campaign_state": "paused", 
        "processed":"in_progress", 
        "modes":["obj1","obj2"]
    }, 
    "876": {
        "cost": 0, 
        "name": "MARVEL_BLACK_WIDOW_4DEC2019", 
        "email": "test.user@silverpush.co", 
        "views": 0, 
        "clicks": 0, 
        "impressions": 0, 
        "campaign_state": "paused", 
        "processed":"in_progress", 
        "modes":["obj1","obj2"]
    }
}
Run Code Online (Sandbox Code Playgroud)

我想更新campaign_info(列名)列的内部键“已处理”和“模型”的campaign_id 是“876”。

我试过这个查询:

update safe_vid_info 
set campaign_info -> '835' --> 'processed'='completed' 
where cid = 'kiywgh'; 
Run Code Online (Sandbox Code Playgroud)

但它没有用。

任何帮助表示赞赏。谢谢。

GMB*_*GMB 11

这是你想要的吗?

jsonb_set(campaign_info, '{876,processed}', '"completed"')
Run Code Online (Sandbox Code Playgroud)

这会使用 value 更新 path 处"876" > "processed"的值'completed'

在您的更新查询中:

update safe_vid_info 
set campaign_info = jsonb_set(campaign_info, '{876,processed}', '"completed"')
where cid = 'kiywgh'; 
Run Code Online (Sandbox Code Playgroud)