在postgres 10中更新jsonb列

时间:2018-12-16 14:43:40

标签: postgresql jsonb

我正在尝试更新PG10中的jsonb列。我注意到只有在该列中存在给定记录的某些值时,以下内容才有效。

UPDATE public.mytable SET config = jsonb_set (
    config, '{"data1"}', '{ 
        "text" : "my text"
        }', TRUE) 
WHERE id = 1234;

仅当列config不为null时,更新成功。我执行语句时没有看到任何错误。

如果给定记录的此列为空,我需要这样做

UPDATE public.mytable SET config = '{ 
   "data1" : {     
        "text" : "my text"
        }
    }' 
WHERE id = 1234;

所以我当前的策略是检查非空值,并使用第一种或第二种方法更新列值。这是正确的方法吗?为什么在使用jsonb_set时值没有更新?

1 个答案:

答案 0 :(得分:0)

使用COALESCE(config,'{}')

UPDATE mytable SET config = jsonb_set (
    COALESCE(config,'{}'),'{"data1"}', '{ 
        "text" : "my text"
        }', TRUE) 
WHERE id = 1234;

Demo