postgresql-将数据从JSON文件追加到表

时间:2019-04-05 03:10:17

标签: sql json postgresql

我以虹膜数据集中的两列为例-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_recordsetjson_populate_recordset。但是如何?

还可以在没有raw_json表的情况下完成此操作吗?

PS-几乎所有现有的SE问题在其查询中都使用原始json字符串。所以这对我不起作用。

1 个答案:

答案 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;

DEMO