使用pgAdmin4与PostgreSQL10执行COPY FROM时遇权限拒绝问题
解决PostgreSQL COPY FROM权限拒绝问题(Windows 10环境)
这个权限报错其实是PostgreSQL的COPY命令和psql的\copy命令运行机制不同导致的,我给你详细拆解并解决:
为什么会出现权限拒绝?
当你执行COPY BD.CP FROM 'C:\Users\NOMUSER\Desktop\MONDOSSIER\Fichier.csv' with delimiter ';'时,这个命令是让PostgreSQL服务器进程去读取文件。而在Windows系统中,PostgreSQL服务器默认是用名为postgres的系统用户运行的,这个用户没有访问你个人用户桌面文件夹的权限,所以就会弹出Permission denied错误。
提示里提到的psql的\copy功能,是让psql客户端程序去读取文件——客户端是用你当前登录的Windows用户身份运行的,自然能访问你的桌面文件,这也是更简单的解决方案。
解决方案1:使用psql的\copy命令(推荐)
操作步骤很简单:
- 打开pgAdmin4,找到你要操作的数据库,右键选择「PSQL Tool」,打开psql命令行窗口
- 在命令行里执行以下命令(路径如果包含空格,要保持引号包裹):
\copy BD.CP FROM 'C:\Users\NOMUSER\Desktop\MONDOSSIER\Fichier.csv' WITH DELIMITER ';'
- 如果你的CSV文件第一行是表头,记得加上
HEADER参数跳过表头:
\copy BD.CP FROM 'C:\Users\NOMUSER\Desktop\MONDOSSIER\Fichier.csv' WITH DELIMITER ';' HEADER
解决方案2:给PostgreSQL服务器用户授权文件夹权限(不推荐)
如果你一定要用COPY命令,可以给postgres用户开放文件所在文件夹的读取权限:
- 找到文件夹
C:\Users\NOMUSER\Desktop\MONDOSSIER,右键点击→「属性」→「安全」选项卡→「编辑」 - 点击「添加」,在弹出的窗口中输入
postgres,点击「检查名称」,确认后点击「确定」 - 在权限列表中,给
postgres用户勾选「读取」和「列出文件夹内容」的权限,点击「应用」→「确定」 - 现在再执行原来的
COPY命令就可以正常读取文件了
内容的提问来源于stack exchange,提问作者Logique
相关产品推荐
相关产品推荐

