web-dev-qa-db-ja.com

PostgreSQLのjsonbフィールドの属性の名前変更

Postgresql 9.5では、jsonbフィールドの属性の名前を変更する方法はありますか?

例えば:

{ "nme" : "test" }

名前を変更する必要があります

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

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

ネストされた属性を処理し、古い名前を使用しない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';
7
emlai

私の変数タイプはjsonです。 jsonbで変更すると、表示に依存するため、実行できません。とにかく、column_name :: jsonbで修正しました。このような問題に遭遇した人々と共有したかった。 @klinにも感謝

0
malik