web-dev-qa-db-fra.com

Attribut de renommage PostgreSQL dans le champ jsonb

Dans postgresql 9.5, existe-t-il un moyen de renommer un attribut dans un champ jsonb?

Par exemple:

{ "nme" : "test" }

devrait être renommé en

{ "name" : "test"}
25
T. Kong

Dans UPDATE utilisez supprimer (-) et concaténer (||) opérateurs , par exemple:

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)
51
klin

J'ai utilisé ce qui suit pour gérer les attributs imbriqués et ignorer tout json qui n'utilise pas l'ancien nom:

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';
7
emlai

Mon type de variable est json. Quand je l'ai changé avec jsonb, je ne peux pas le faire, car cela dépend de la vue. Quoi qu'il en soit, je l'ai corrigé avec column_name :: jsonb. Je voulais partager avec des gens qui rencontrent comme ça des problèmes. Merci aussi @klin

0
malik