sql >> データベース >  >> RDS >> PostgreSQL

Postgres/JSON-すべての配列要素を更新します

    キーでjson配列要素を更新する標準関数はありません。カスタム関数はおそらく問題を解決する最も簡単な方法です:

    create or replace function update_array_elements(arr jsonb, key text, value jsonb)
    returns jsonb language sql as $$
        select jsonb_agg(jsonb_build_object(k, case when k <> key then v else value end))
        from jsonb_array_elements(arr) e(e), 
        lateral jsonb_each(e) p(k, v)
    $$;
    
    select update_array_elements('[{"bar":true},{"bar":true}]'::jsonb, 'bar', 'false');
    
          update_array_elements
    ----------------------------------
     [{"bar": false}, {"bar": false}]
    (1 row)
    

    クエリは次のようになります:

    with a_data(js) as (
    values(
        '{
            "foo": [
              {
                "bar": true
              },
              {
                "bar": true
              }
            ]
        }'::jsonb)
    )
    select
        jsonb_set(js, '{foo}', update_array_elements(js->'foo', 'bar', 'false'))
        from a_data;
    
                     jsonb_set                 
    -------------------------------------------
     {"foo": [{"bar": false}, {"bar": false}]}
    (1 row)     
    


    1. Oracleにシーケンスを含む複数の行を挿入する

    2. SQLite Char()のしくみ

    3. Spotlight Tuning Pack Basic:最高の無料SQL最適化ツール

    4. Re-IDリスクを下げるための間接識別子の匿名化