JSON関数のpostgresドキュメント(https://www.postgresql.org/docs/9.6/static/functions-json.html)を見ると、JSONオブジェクトを一連の行に展開することについて理解できないセクションがあります。 。
ドキュメントは、この機能のサンプル使用を与える:json_populate_recordset(base anyelement, from_json json)
としてselect * from json_populate_recordset(null::myrowtype, '[{"a":1,"b":2},{"a":3,"b":4}]')
しかし、その最初の引数(null::myrowtype)
が何であるかはわかりません-テーブル定義?
この関数の説明は次のとおりです。from_json内のオブジェクトの最も外側の配列を、baseで定義されたレコードタイプと列が一致する行のセットに展開します(以下の注を参照)。
下部のメモはどれも関連性がないようでした。私はそれをすべて理解するためにサンプルコードでより良い説明を望んでいます。
2番目の通知は、欠落しているフィールド/値がどのように処理されるかを説明しているため、ドキュメントで関心のあるものです。
注:json_populate_record、json_populate_recordset、json_to_record、およびjson_to_recordsetでは、JSONからの型強制は「最善の努力」であり、一部の型では目的の値にならない場合があります。JSONキーは、ターゲット行タイプの同一の列名と照合されます。ターゲット行タイプに表示されないJSONフィールドは出力から省略され、どのJSONフィールドにも一致しないターゲット列は単にNULLになります。
json_populate_recordset
jsonオブジェクトの名前を、最初の引数として指定されたテーブルの列名にマップします。
create table public.test (a int, b text);
select * from json_populate_recordset(null::public.test, '[{"a":1,"b":"b2"},{"a":3,"b":"b4"}]');
a | b
---+----
1 | b2
3 | b4
(2 rows)
--Wrong column name:
select * from json_populate_recordset(null::public.test, '[{"a":1,"c":"c2"},{"a":3,"c":"c4"}]');
a | b
---+---
1 |
3 |
(2 rows)
--Wrong datatype:
select * from json_populate_recordset(null::public.test, '[{"a":1.1,"b":22},{"a":3.1,"b":44}]');
ERROR: invalid input syntax for integer: "1.1"
または、既存のテーブルの列名/タイプを使用する代わりに、その場で列を定義できます
select * from json_to_recordset('[{"a":1,"b":"foo"},{"a":"2","c":"bar"}]') as x(a int, b text);
a | b
---+-----
1 | foo
2 |
(2 rows)
->デフォルトの型キャストが発生し(「2」は2にマップされます)、欠落しているフィールドは無視され(b、2番目のレコード)、フィールドが定義されていないことに注意してください(c)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加