计算机: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
任何帮助深表感谢!
chmod a+rX /users/darchcruise/ /users/darchcruise/desktop /users/darchcruise/desktop/items_ordered.csv
这将更改您的文件夹的访问权限。请注意,每个人都可以阅读您的文件。如果没有管理权限,则不能将chown用作用户。还可以考虑学习umask以简化共享文件的创建。
为macbook首先我打开终端然后键入
open /tmp
或者在finder目录中直接输入命令+ shift + g然后输入/ tmp进入该文件夹。
它在finder中打开临时文件夹。然后我将复制的csv文件粘贴到此文件夹中。然后我再次进入postgres终端并输入以下命令,然后将我的csv数据复制到db表中
\copy recharge_operator FROM '/private/tmp/operator.csv' DELIMITER ',' CSV;
可能是你正在使用pgadmin通过连接远程主机然后你正在尝试从你的系统更新那里但是它在远程系统的文件系统中搜索该文件...它我遇到的错误我可能也是你的检查它
假设使用psql
命令行工具,您可以使用\copy
而不是copy
。
\copy
打开文件并将内容提供给服务器,而copy
告诉服务器打开文件本身并读取它,这可能是许可方面的问题,甚至不可能如果客户端和服务器在不同文件共享的不同机器上运行-之间。
在引擎盖下,\copy
实现为COPY FROM stdin
并接受与服务器端COPY
相同的选项。
将CSV文件复制到/ tmp
对我来说,这解决了这个问题。
将CSV文件复制到/ tmp文件夹中
COPY命令中指定的文件由服务器直接读取或写入,而不是由客户端应用程序读取或写入。因此,它们必须驻留在数据库服务器计算机上,或者可以访问它们,而不是客户端。它们必须是PostgreSQL用户(服务器运行的用户ID)可访问,可读或可写,而不是客户端。 COPY命名文件只允许用于数据库超级用户,因为它允许读取或写入服务器有权访问的任何文件。
当我尝试将数据从远程服务器导出到本地磁盘时,我遇到了问题。我没有意识到SQL copy
实际上是在服务器上执行的,并且它试图写入服务器文件夹。相反,正确的做法是使用\copy
这是psql命令,它按照我的预期写入本地文件系统。 http://www.postgresql.org/message-id/CAFjNrYsE4Za_KWzmfgN1_-MG7GTw_vpMRxPk=OEjAiLqLskxdA@mail.gmail.com
也许这对其他人也许有用。
另一种方法是,如果你有pgAdmin并且习惯使用GUI就是去模式中的表并右键单击要导入文件的表,然后选择“导入”浏览计算机中的文件,选择您的文件类型,您希望将数据插入的列,然后选择导入。
这是使用pgAdmin III和PostgreSQL的9.4版本完成的
对我来说,只需为chown命令添加sudo(或以root身份运行):
sudo chown postgres /users/darchcruise/desktop/items_ordered.csv
如果您在Windows 10下遇到此问题,请在安全选项卡上添加用户组“youcomputer \ Users”并授予其完全控制权,这样就解决了我的问题
我在父文件夹上使用递归chown解决了同样的问题:
sudo chown -R postgres:postgres /home/my_user/export_folder
(我的出口在/home/my_user/export_folder/export_1.csv
)