PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgresql и jsonb - вмъкване на ключ/стойност в многостепенен масив

Използвайте jsonb_array_elements за да премахнете всички елементи на масива и след това добавете необходимия json и използвайте jsonb_agg за да го обобщите отново:

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

ДЕМО




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ограничения за кръстосани таблици в PostgreSQL

  2. SQLAlchemy + Postgres:Може да се наложи да добавите изрични преобразувания на типове при сливане

  3. hibernate не можа да получи следващата стойност на последователността

  4. Прилагане на множество функции на прозорец върху един и същи дял

  5. Използване на параметър като име на колона във функцията Postgres