sql >> Database >  >> RDS >> PostgreSQL

Sleutelwaarde bijwerken in jsonb-array van objecten

Je kunt het doen met een mix van jsonb functies en operators :

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. MySQL COALESCE- en NULLIF-functie

  2. MySQL max_allowed_packet param wat is de vangst?

  3. Retourneert slechts één rij van de meest rechtse tabel voor elke rij in de meest linkse tabel

  4. Firemonkey mobiele applicatie en externe MySQL