Merging Concatenating JSON(B) columns in query

后端 未结 10 1560
不思量自难忘°
不思量自难忘° 2020-12-08 09:40

Using Postgres 9.4, I am looking for a way to merge two (or more) json or jsonb columns in a query. Consider the following table as an example:

10条回答
  •  鱼传尺愫
    2020-12-08 10:15

    This function would merge nested json objects

    create or replace function jsonb_merge(CurrentData jsonb,newData jsonb)
     returns jsonb
     language sql
     immutable
    as $jsonb_merge_func$
     select case jsonb_typeof(CurrentData)
       when 'object' then case jsonb_typeof(newData)
         when 'object' then (
           select    jsonb_object_agg(k, case
                       when e2.v is null then e1.v
                       when e1.v is null then e2.v
                       when e1.v = e2.v then e1.v 
                       else jsonb_merge(e1.v, e2.v)
                     end)
           from      jsonb_each(CurrentData) e1(k, v)
           full join jsonb_each(newData) e2(k, v) using (k)
         )
         else newData
       end
       when 'array' then CurrentData || newData
       else newData
     end
    $jsonb_merge_func$;
    

提交回复
热议问题