如何在不指定PostgreSQL中键的情况下将jsonb列的所有值更新为相同值?

时间:2018-09-17 07:41:27

标签: postgresql

值如下:

{"111": false, "222": false, "333": false}

如何在不指定键的情况下将其更新为以下内容?

{"111": true, "222": true, "333": true}

2 个答案:

答案 0 :(得分:0)

只需在字符串上使用REPLACE

REPLACE(source, 'false', 'true')::jsonb; 

其中source是您的jsonb列。

答案 1 :(得分:0)

您可以首先使用json_each()分解JSON,为每行提供一个键和值对。使用CASEfalse替换为true。然后使用字符串串联和string_agg()组成JSON,并将其转换回json

UPDATE json
       SET json = (SELECT ('{'
                           || string_agg('"'
                                         || key
                                         || '": '
                                         || CASE
                                              WHEN value::text = 'false' THEN
                                                'true'
                                              ELSE
                                                value::text
                                            END,
                                            ', ')
                                         || '}')::json
                          FROM json_each(json));

db<>fiddle

或者如果类型实际上是jsonb而不是jsonb,则使用json变体。