sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgresql og jsonb - indsættelse af en nøgle/værdi i et multi-level array

Brug jsonb_array_elements for at fjerne alle array-elementerne og derefter tilføje den nødvendige json og bruge jsonb_agg for at samle det igen:

with cte as
 (select id,
         jsonb_agg(jsonb_set(val1,
                             '{blocs}',
                             (select jsonb_agg(arr2 || '{"type": "regular"}')
                                from jsonb_array_elements(arr1.val1 - >
                                                          'blocs') arr2)))
    from challenge, 
         jsonb_array_elements(lines) arr1(val1)
   group by 1) 
update challenge 
   set lines = (cte.jsonb_agg) 
  from cte 
 where challenge.id = cte.id

DEMO




  1. Sådan sammenlignes kun dato og år i php codeigniter

  2. Oracle, tilføjelse af indledende nuller til streng (ikke tal)

  3. Svarende til MySQL's \G i Oracle's SQL*Plus

  4. JDBC:fremmednøgle på PK oprettet i samme transaktion