データベース行の1つにテキストとしてjsonを保存しています。 jsonデータは次のとおりです
[{"id":67272,"name":"EE_Quick_Changes_J_UTP.xlsx"},{"id":67273,"name":"16167.txt"},{"id":67274,"name":"EE_12_09_2013_Bcum_Searchall.png"}]
これを解析するには、postgresqlメソッドを使用します
json_populate_recordset()
次のようなコマンドを投稿すると
select json_populate_recordset(null::json,'[{"id":67272,"name":"EE_Quick_Changes_J_UTP.xlsx"},{"id":67273,"name":"16167.txt"},{"id":67274,"name":"EE_12_09_2013_Bcum_Searchall.png"}]') from anoop;
それは私に次のエラーを与えますjson_populate_recordsetの最初の引数は行タイプでなければなりません
注:from句の「anoop」はテーブル名です。
json_populate_recordsetメソッドを使用してこのjson文字列からデータを抽出する方法を誰かに提案できますか?.
メソッドのリファレンスを http://www.postgresql.org/docs/9.3/static/functions-json.html から取得しました
Pgsql関数に渡される最初の引数json_populate_recordset
行タイプである必要があります。 json配列を使用して既存のテーブルanoop
にデータを入力する場合は、次のようにテーブルanoop
を行タイプとして渡すことができます。
insert into anoop
select * from json_populate_recordset(null::anoop,
'[{"id":67272,"name":"EE_Quick_Changes_J_UTP.xlsx"},
{"id":67273,"name":"16167.txt"},
{"id":67274,"name":"EE_12_09_2013_Bcum_Searchall.png"}]');
ここで、null
は、渡されたjsonで設定されていないテーブル列に挿入するデフォルト値です。
既存のテーブルがない場合は、 行タイプを作成 jsonデータ(つまり、列名とそのタイプ)を保持し、次のように最初のパラメーターとして渡す必要がありますanoop_type
:
create TYPE anoop_type AS (id int, name varchar(100));
select * from json_populate_recordset(null :: anoop_type,
'[...]') --same as above
そのために新しいタイプを作成する必要はありません。
select * from json_populate_recordset(null::record,'[{"id_item":1,"id_menu":"34"},{"id_item":2,"id_menu":"35"}]')
AS
(
id_item int
, id_menu int
)