Postgres ERROR:无法打开文件进行阅读:权限被拒绝

问题描述 投票:39回答:11

计算机:Mac OS X,版本10.8数据库:Postgres

试图将csv文件导入postgres。

pg> copy items_ordered from '/users/darchcruise/desktop/items_ordered.csv' with CSV;
ERROR:  could not open file "/users/darchcruise/desktop/items_ordered.csv" for reading: Permission denied

然后我试了一下

$> chown postgres /users/darchcruise/desktop/items_ordered.csv
chown: /users/darchcruise/desktop/items_ordered.csv: Operation not permitted

最后,我试过了

$> ls -l
-rw-r--r--  1 darchcruise  staff      1016 Oct 18 21:04 items_ordered.csv

任何帮助深表感谢!

postgresql
11个回答
15
投票
chmod a+rX /users/darchcruise/ /users/darchcruise/desktop /users/darchcruise/desktop/items_ordered.csv

这将更改您的文件夹的访问权限。请注意,每个人都可以阅读您的文件。如果没有管理权限,则不能将chown用作用户。还可以考虑学习umask以简化共享文件的创建。


0
投票

为macbook首先我打开终端然后键入

open /tmp

或者在finder目录中直接输入命令+ shift + g然后输入/ tmp进入该文件夹。

它在finder中打开临时文件夹。然后我将复制的csv文件粘贴到此文件夹中。然后我再次进入postgres终端并输入以下命令,然后将我的csv数据复制到db表中

\copy recharge_operator FROM '/private/tmp/operator.csv' DELIMITER ',' CSV;

-3
投票

可能是你正在使用pgadmin通过连接远程主机然后你正在尝试从你的系统更新那里但是它在远程系统的文件系统中搜索该文件...它我遇到的错误我可能也是你的检查它


111
投票

假设使用psql命令行工具,您可以使用\copy而不是copy

\copy打开文件并将内容提供给服务器,而copy告诉服务器打开文件本身并读取它,这可能是许可方面的问题,甚至不可能如果客户端和服务器在不同文件共享的不同机器上运行-之间。

在引擎盖下,\copy实现为COPY FROM stdin并接受与服务器端COPY相同的选项。


52
投票

将CSV文件复制到/ tmp

对我来说,这解决了这个问题。


9
投票

将CSV文件复制到/ tmp文件夹中

COPY命令中指定的文件由服务器直接读取或写入,而不是由客户端应用程序读取或写入。因此,它们必须驻留在数据库服务器计算机上,或者可以访问它们,而不是客户端。它们必须是PostgreSQL用户(服务器运行的用户ID)可访问,可读或可写,而不是客户端。 COPY命名文件只允许用于数据库超级用户,因为它允许读取或写入服务器有权访问的任何文件。


5
投票

当我尝试将数据从远程服务器导出到本地磁盘时,我遇到了问题。我没有意识到SQL copy实际上是在服务器上执行的,并且它试图写入服务器文件夹。相反,正确的做法是使用\copy这是psql命令,它按照我的预期写入本地文件系统。 http://www.postgresql.org/message-id/CAFjNrYsE4Za_KWzmfgN1_-MG7GTw_vpMRxPk=OEjAiLqLskxdA@mail.gmail.com

也许这对其他人也许有用。


2
投票

另一种方法是,如果你有pgAdmin并且习惯使用GUI就是去模式中的表并右键单击要导入文件的表,然后选择“导入”浏览计算机中的文件,选择您的文件类型,您希望将数据插入的列,然后选择导入。

这是使用pgAdmin III和PostgreSQL的9.4版本完成的


1
投票

对我来说,只需为chown命令添加sudo(或以root身份运行):

sudo chown postgres /users/darchcruise/desktop/items_ordered.csv


1
投票

如果您在Windows 10下遇到此问题,请在安全选项卡上添加用户组“youcomputer \ Users”并授予其完全控制权,这样就解决了我的问题


0
投票

我在父文件夹上使用递归chown解决了同样的问题:

sudo chown -R postgres:postgres /home/my_user/export_folder

(我的出口在/home/my_user/export_folder/export_1.csv

© www.soinside.com 2019 - 2024. All rights reserved.