jsonpostgresqlsql-updatejsonbpostgresql-9.5

PostgreSQL rename attribute in jsonb field


In PostgreSQL 9.5, is there a way to rename an attribute in a jsonb field?

For example:

{ "nme" : "test" }

should be renamed to

{ "name" : "test"}

Solution

  • In UPDATE use delete (-) and concatenate (||) operators, e.g.:

    create table example(id int primary key, js jsonb);
    insert into example values
        (1, '{"nme": "test"}'),
        (2, '{"nme": "second test"}');
    
    update example
    set js = js - 'nme' || jsonb_build_object('name', js->'nme')
    where js ? 'nme'
    returning *;
    
     id |           js            
    ----+-------------------------
      1 | {"name": "test"}
      2 | {"name": "second test"}
    (2 rows)