PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgresql i jsonb - wstawianie klucza/wartości do wielopoziomowej tablicy

Użyj jsonb_array_elements aby rozpakować wszystkie elementy tablicy, a następnie dodać wymagany json i użyć jsonb_agg aby ponownie zagregować:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Użyj JOOQ, aby wykonać usuwanie określające wiele kolumn w klauzuli not in

  2. Połącz tabele w kolumnach złożonego klucza obcego/podstawowego w zapytaniu

  3. Klauzula IN z NULL lub IS NULL

  4. rake db:utwórz błąd kodowania za pomocą postgresql

  5. Jak zachować dane, które nie są sortowane?