PostgreSQL COPY命令报错及CSV文件导入问题求助
问题解决步骤
一、先修复COPY命令的语法错误
你原来的SQL命令存在3个问题:
- DELIMITER后面用了中文引号
‘,’,必须改成英文引号',' - 命令末尾多余的
**要删除 - 不要在COPY命令内部加注释,避免干扰语法解析
修正后的服务器端COPY命令(需文件在服务器上):
COPY population(year, age, ethnic, sex, area, count) FROM '/home/postgres/Popdata.csv' DELIMITER ',' CSV HEADER;
二、解决文件找不到的问题
你的PostgreSQL运行在Linux环境(\! pwd显示路径为/home/postgres),而你指定的是Windows本地路径C:\Users\Zadane\Downloads\Popdata.csv,服务器无法直接访问Windows的本地文件,有两种解决方式:
方式1:将CSV文件传到Linux服务器
- 把Windows下载文件夹里的
Popdata.csv传到Linux服务器的/home/postgres目录(可用scp、FileZilla等工具传输) - 给文件添加postgres用户可读权限:
chmod 644 /home/postgres/Popdata.csv
- 执行上面修正后的COPY命令即可
方式2:使用psql客户端的\copy命令(无需传文件到服务器)
\copy是psql客户端命令,会从你的Windows本地读取文件并导入,适合跨系统场景,直接执行以下命令:
\copy population(year, age, ethnic, sex, area, count) FROM 'C:\Users\Zadane\Downloads\Popdata.csv' DELIMITER ',' CSV HEADER;
三、关于手动导入7-8万条记录
不推荐用手动INSERT语句导入,7-8万条记录会非常耗时且容易出错。COPY或\copy是PostgreSQL官方推荐的批量导入方法,效率远高于逐条INSERT,完全能处理这个量级的数据。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

