PgAdmin导入CSV文件到表时报错找不到文件该如何解决?
PgAdmin导入CSV报错58P01问题解答
报错触发原因
该报错由服务端COPY FROM命令的执行逻辑导致:COPY FROM是PostgreSQL的原生SQL命令,由PostgreSQL服务器进程直接执行读取文件的操作,出现报错常见原因如下:
- PostgreSQL服务运行在远程服务器上,无法访问你本地电脑D盘的文件路径
- 即使PostgreSQL服务运行在本地,服务进程的运行账号没有D盘根目录的读取权限,或是你填写的文件路径有误,对应路径下确实不存在book.csv文件
解决方案
方案1:使用PgAdmin自带的图形化导入工具(最推荐)
这是PgAdmin用户最简单的操作方式,走客户端侧文件读取逻辑,不需要服务端访问本地文件:
- 打开PgAdmin,在左侧导航栏找到你要导入数据的目标表,右键点击选择导入/导出数据
- 在弹出的配置窗口中选择「导入」,文件名选择你本地的
D:\book.csv,再根据CSV的实际配置调整编码、字段分隔符、是否包含表头等参数,点击确认即可完成导入
方案2:使用psql的\copy命令(适合命令行用户)
\copy是psql提供的客户端侧命令,由本地客户端读取文件后传给服务端,不需要服务端拥有文件访问权限,参考命令如下:
\copy 目标表名 FROM 'D:\book.csv' WITH (FORMAT csv, HEADER true, DELIMITER ',', ENCODING 'utf8');
你可以根据自己CSV的实际情况调整参数:HEADER true代表CSV第一行是表头,DELIMITER指定字段分隔符,ENCODING指定文件编码。
方案3:继续使用服务端COPY FROM命令
如果一定要用原生COPY FROM命令,需要同时满足两个条件:
- 将
book.csv文件上传到PostgreSQL服务运行的服务器上,填写服务端可识别的绝对路径,Windows环境下注意路径反斜杠需要转义,可写成'D:\\book.csv'或者'D:/book.csv' - 给PostgreSQL服务的运行账号开放该csv文件的读取权限
内容的提问来源于stack exchange,提问作者user16904508
相关产品推荐
相关产品推荐

