我以虹膜数据集中的两列为例-sepal_length和sepal_width。
我有两个桌子
create table iris(sepal_length real, sepal_width real);
和
create table raw_json(data jsonb);
在JSON文件中,我有这样的数据
[{"sepal_width":3.5,"sepal_length":5.1},{"sepal_width":3.0,"sepal_length":4.9}]
我要做的第一件事是copy raw_json from '/data.json';
到目前为止,我只能弄清楚如何使用jsonb_array_elements
。
select jsonb_array_elements(data) from raw_json;
退回
jsonb_array_elements
-------------------------------------------
{"sepal_width": 3.5, "sepal_length": 5.1}
{"sepal_width": 3.0, "sepal_length": 4.9}
我想将raw_json
表中的数据插入(实际附加)到iris
表中。我发现我需要使用jsonb_to_recordset
或json_populate_recordset
。但是如何?
还可以在没有raw_json
表的情况下完成此操作吗?
PS-几乎所有现有的SE问题在其查询中都使用原始json字符串。所以这对我不起作用。
答案 0 :(得分:0)
您必须从jsonb_array_elements
子句中使用的from
的输出中提取jsons
INSERT INTO iris(sepal_length,sepal_width)
select (j->>'sepal_length' ) ::real,
(j->>'sepal_width' ) ::real
from raw_json cross join jsonb_array_elements(data) as j;