小编Dan*_*ter的帖子

postgresql 9.5使用jsonb_set更新特定的jsonb数组值

目前我正在使用postgreSQL 9.5并尝试更新jsonb字段数组中的值.但我无法获得所选值的索引

我的表看起来像:

 CREATE TABLE samples (
    id serial,
    sample jsonb
 );
Run Code Online (Sandbox Code Playgroud)

我的JSON看起来像:

{"result": [
    {"8410": "ABNDAT", "8411": "Abnahmedatum"},
    {"8410": "ABNZIT", "8411": "Abnahmezeit"},
    {"8410": "FERR_R", "8411": "Ferritin"}
]}
Run Code Online (Sandbox Code Playgroud)

我的SELECT语句可以获得正确的值:

SELECT 
    id, value 
FROM 
    samples s, jsonb_array_elements(s.sample#>'{result}') r  
WHERE 
    s.id = 26 and r->>'8410' = 'FERR_R';
Run Code Online (Sandbox Code Playgroud)

结果是:

id | value
----------------------------------------------
26 | {"8410": "FERR_R", "8411": "Ferritin"}
Run Code Online (Sandbox Code Playgroud)

好的,这就是我想要的.现在我想使用以下UPDATE语句执行更新以添加新元素"ratingtext"(如果尚未存在):

UPDATE 
    samples s
SET
    sample = jsonb_set(sample,
              '{result,2,ratingtext}',
              '"Some individual text"'::jsonb,
              true)
WHERE
      s.id = 26;
Run Code Online (Sandbox Code Playgroud)

执行UPDATE语句后,我的数据看起来像这样(也正确):

{"result": [
    {"8410": "ABNDAT", "8411": "Abnahmedatum"}, …
Run Code Online (Sandbox Code Playgroud)

arrays postgresql json sql-update jsonb

10
推荐指数
1
解决办法
4988
查看次数

标签 统计

arrays ×1

json ×1

jsonb ×1

postgresql ×1

sql-update ×1