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

Opdater nøgleværdi i jsonb-array af objekter

Du kan gøre det med en blanding af jsonb funktioner og operatører :

UPDATE company c
SET    log = sub.log2
FROM  (
   SELECT *
   FROM   company c
   CROSS  JOIN LATERAL (
      SELECT jsonb_agg(jsonb_set(l, '{oldvalue}', to_jsonb(rtrim(l->>'oldvalue')))) AS log2
      FROM   jsonb_array_elements(c.log) l
      ) sub
   WHERE  jsonb_typeof(log) = 'array'  -- exclude NULL and non-arrays
   ) sub
WHERE  c.code =  sub.code   -- assuming code is unique
AND    c.log  <> sub.log2;  -- only where column actually changed.

SQL Fiddle.



  1. Find rækker, hvor tekstarray indeholder værdi svarende til input

  2. MySQL top 2 rekorder per gruppe

  3. En anden mysqld-server, der kører på port 3306-fejl

  4. Hvordan opsætter man pandas DataFrame til Microsoft SQL Server-tabel?