You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何使用COPY命令导入文件名含空格的CSV文件?

PostgreSQL COPY导入带空格文件名CSV的解决方案

问题原因

你的报错核心来自两个问题:

  1. SQL单引号包裹的路径中不需要用反斜杠转义空格,你额外加的\会让PostgreSQL认为文件名本身包含反斜杠,和实际存在的YIELD NAME.csv文件名不匹配,自然提示找不到文件。
  2. 原生COPY命令是PostgreSQL服务端进程执行的,你使用docker部署的场景下,需要确认你写的路径是容器内部的路径,且postgres用户拥有该文件的读取权限。

解决方法

方法1:修正路径使用服务端COPY命令

去掉路径中的反斜杠转义符,直接写带空格的文件名即可:

copy cad.yield_name
    from '/data/cad/base/YIELD NAME.csv'
    delimiter ',' csv header;

使用该方法需要先确认两个前提:

  • 你宿主机存放CSV的目录已经正确挂载到docker容器的/data/cad/base/路径下
  • 容器内的postgres用户对该CSV文件有可读权限,可执行以下命令配置权限:
# 进入postgres容器
docker exec -it 你的postgres容器名称 bash
# 给文件授权
chown postgres:postgres /data/cad/base/YIELD NAME.csv

方法2:使用客户端侧\copy命令(更适配docker场景)

根据错误提示的建议,\copy是psql客户端执行的命令,读取的是你执行psql命令的本地(你的MacOS系统)文件,不需要考虑服务端路径挂载、权限问题,写法如下:

\copy cad.yield_name from '/你Mac本地存放文件的实际路径/YIELD NAME.csv' delimiter ',' csv header;

注意事项:

  • \copy开头不需要加分号,路径不需要转义空格,直接写带空格的文件名即可
  • 如果是通过psql远程连接docker内的PostgreSQL,用该方法不需要把文件拷贝进容器,直接读取本地路径即可,操作更简单

内容的提问来源于stack exchange,提问作者daydreamer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:36:03