首页 > 解决方案 > 如何在不指定 postgresql 中的键的情况下将 jsonb 列的所有值更新为相同的值?

问题描述

有一个值如下:

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

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

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

标签: postgresql

解决方案


json_each()您可以首先通过为每行提供一个键和值对来分解 JSON 。使用 aCASE替换falsetrue。然后使用字符串连接组成一个 JSONstring_agg()并将其转换回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<>小提琴

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


推荐阅读