如何使用COPY命令将JSON文件数据导入PostgreSQL表?
解决PostgreSQL导入嵌套JSON的COPY命令使用问题
直接用COPY table_name FROM file_path;失败的原因是:PostgreSQL默认的COPY命令处理的是平面格式(如CSV、TEXT),而你的JSON是嵌套结构,字段映射不匹配。以下是两种场景的正确操作方法:
场景1:目标表是平面结构(拆分JSON字段存储)
假设你要把JSON里的type和weight分别存入表的对应字段,先创建目标表:
CREATE TABLE planes ( type TEXT, weight TEXT );
- 创建临时表接收完整JSON内容:
CREATE TEMP TABLE temp_json (data jsonb);
- 用COPY导入JSON文件到临时表:
COPY temp_json FROM '/path/to/your/plane.json';
- 解析嵌套JSON并插入目标表:
INSERT INTO planes (type, weight) SELECT data->'plane'->>'type', data->'plane'->>'weight' FROM temp_json;
场景2:目标表用JSONB字段存储完整嵌套结构
如果你的表设计是直接存储整个JSON对象,先创建目标表:
CREATE TABLE plane_data ( plane_info jsonb );
直接用带FORMAT参数的COPY命令导入(PostgreSQL 12+支持):
COPY plane_data (plane_info) FROM '/path/to/your/plane.json' FORMAT JSON AS 'object';
注意:如果你的JSON文件是多行多个对象(JSON Lines格式),可以去掉
AS 'object'参数,直接用FORMAT JSON。
内容的提问来源于stack exchange,提问作者spxcypxt
相关产品推荐
相关产品推荐

