更新列表Postgres jsonb中的值

我正在尝试更新json

[{"id": "1","name": "myconf","icons": "small","theme": "light","textsize": "large"},{"id": 2,"name": "myconf2","theme": "dark"},{"name": "firstconf","theme": "dark",{"id": 3,"name": "firstconxsf","theme": "dassrk","textsize": "lassrge"}]

这是包含该json列的表:

CREATE TABLE USER_CONFIGURATIONS ( ID BIGSERIAL PRIMARY KEY,DATA JSONB ); 

我正在使用添加新字段很容易:

UPDATE USER_CONFIGURATIONS
SET DATA = DATA || '{"name":"firstconxsf","theme":"dassrk","textsize":"lassrge"}'
WHERE id = 9;

但是如何用id = 1或2更新单次

qmm1030798770 回答:更新列表Postgres jsonb中的值

Click: step-by-step demo:db<>fiddle

UPDATE users                                                   -- 4
SET data = s.updated
FROM (
    SELECT
        jsonb_agg(                                             -- 3
            CASE                                               -- 2
                WHEN ((elem ->> 'id')::int IN (1,2)) THEN
                    elem || '{"name":"abc","icon":"HUGE"}'
                ELSE elem
            END
        ) AS updated
    FROM
        users,jsonb_array_elements(data) elem                        -- 1
) s;
  1. 将数组元素分别扩展为一行
  2. 如果元素具有相关ID,请使用||运算符进行更新;如果没有,请保留原始版本
  3. 在更新JSON数据后重新聚合数组
  4. 执行UPDATE语句。
本文链接:https://www.f2er.com/3082724.html

大家都在问