PostgreSQL переименовать атрибут в поле jsonb

В postgresql 9.5 есть ли способ переименовать атрибут в поле jsonb?

Например:

{ "nme" : "test" }

следует переименовать в

{ "name" : "test"}

Ответ 1

В UPDATE используйте операторы удаления (-) и сцепления (||), например:

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)

Ответ 2

Я использовал следующее для обработки вложенных атрибутов и пропуска любого json, который не использует старое имя:

UPDATE table_name
SET json_field_name = jsonb_set(json_field_name #- '{path,to,old_name}',
                                '{path,to,new_name}',
                                json_field_name#>'{path,to,old_name}')
WHERE json_field_name#>'{path,to}' ? 'old_name';

Ответ 3

Мой тип переменной - JSON. Когда я изменил его с помощью JSONB, я не могу этого сделать, потому что это зависит от просмотра. Во всяком случае, я исправил это с помощью column_name :: jsonb. Я хотел бы поделиться с людьми, которые встречаются, как эта проблема. Также спасибо @klin