私はバージョン9.6を使用しています。私はこのように書類を持っている:PostgreSQLでJSON配列要素を選択して更新するにはどうすればよいですか?
{
"name" : "John Doe",
"phones" : [
{
"type" : "mobile",
"number" : "555-555-0000",
"deleted": false
},
{
"type" : "home",
"number" : "555-555-0001",
"needsUpdated" : true
},
{
"type" : "work",
"number" : "555-555-0002"
}
]
}
私はこのようにそれらを作成しました:今、私は名前ジョン・ドウと行を選択する方法にA
、を把握しようとしている
create table t_json (c_json json not null);
insert into t_json (c_json) values ('{"name":"John Doe","phones": [{"type":"mobile","number":"555-555-0000"},{"type":"home","number":"555-555-0001"},{"type": "work","number": "555-555-0002"}]}');
insert into t_json (c_json) values ('{"name":"Jane Dane","phones": [{"type":"mobile","number":"555-555-0030"},{"type":"home","number":"555-555-0020"},{"type": "work","number": "555-555-0010"}]}');
彼の携帯電話番号を「555-555-0003」に更新します。
私はこのような適切な文書を照会できることを考え出しPostgresql 9.6 documentationここから:
select c_json from t_json where c_json->>'name' = 'John Doe';
しかし、私はタイプによって電話・アレイ内の適切なサブ文書を選択する方法を確認するために失敗しています、数値を更新します。誰か助けてくれますか?
EDIT私は余分な値を持っており、一貫していないサブ文書を想定する必要が
。そこで私は上記をいくつか追加しました。この時点でデータの損失がない限り、このアップデートは不可能であると私は確信しています。
のように私はあなたが[この – maxymoo
可能な複製のためにjsonb_set使うと思いますが、あります。新しいPostgreSQL JSONデータ型内のフィールドを変更する方法は?](https://stackoverflow.com/questions/18209625/how-do-i-modify-fields-inside-the-new-postgresql-json-datatype) –
@ JorgeCamposはこれが重複していません。私はその質問全体とすべての答えを読んで、配列内のサブ文書を更新する方法を見つけませんでした。しかし、ありがとう。 –