2017-01-05 5 views
1

配列&アップデートフィールドに文字列を変換しますセミコロンで区切られた値でJSON配列に変換します。だから、結果は次のようになります。私は、JSONの配列を取得する方法を見つけたPostgreSQLのJSON(b)は、私は次の内容のPostgreSQLではjsonbフィールドを持っている

{ "object" : { "urls": ["A", "B", "C"] } }

to_json(string_to_array(replace((json->'object'->'urls')::text, '"',''), ';'));

を使用すると、( - >テキスト - >配列 - 。私は変換JSONなしでを行うためのより良い方法があるはずだと思う> JSON提案は歓迎されている)私に["A", "B", "C"]与え

しかし、今すぐurlsフィールドをjson配列で更新するにはどうすればよいですか?おそらく私はjsonb_setを使用する必要がありますか?

答えて

2

使用jsonbと機能jsonb_set()

create table my_table(id int primary key, jdata jsonb); 
insert into my_table values 
(1, '{ "object": { "urls": "A;B;C" } }'); 

update my_table 
set jdata = jsonb_set(
     jdata, 
     array['object', 'urls'], 
     to_jsonb(string_to_array(replace((jdata->'object'->'urls')::text, '"',''), ';')) 
     ) 
returning *; 

id |    jdata     
----+------------------------------------- 
    1 | {"object": {"urls": ["A", "B", "C"]}} 
(1 row) 
+0

それがうまく働きました。私はちょうど 'WHERE jdata - > 'object' - > 'urls' IS NOT NULL'を追加しなければなりませんでした。さもなければ、それらの行はjson(またはあなたの場合はjdata)としてnullを持っていました。 – mxlse

関連する問題