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

use*_*984 48 postgresql

计算机: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
Run Code Online (Sandbox Code Playgroud)

然后我试了一下

$> chown postgres /users/darchcruise/desktop/items_ordered.csv
chown: /users/darchcruise/desktop/items_ordered.csv: Operation not permitted
Run Code Online (Sandbox Code Playgroud)

最后,我试过了

$> ls -l
-rw-r--r--  1 darchcruise  staff      1016 Oct 18 21:04 items_ordered.csv
Run Code Online (Sandbox Code Playgroud)

任何帮助深表感谢!

Dan*_*ité 119

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

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

在幕后,\copy实现COPY FROM stdin和接受与服务器端相同的选项COPY.

  • 是的,这应该是公认的答案。@JMJanzen,您可以通过单击问题旁边的星号来收藏该主题。 (3认同)
  • 希望每次我不可避免地忘记`\\`并返回到此处时,都可以将此答案标记为有用。请接受我的真诚感谢。 (2认同)

use*_*338 58

将CSV文件复制到/ tmp

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


Bas*_*evs 19

chmod a+rX /users/darchcruise/ /users/darchcruise/desktop /users/darchcruise/desktop/items_ordered.csv
Run Code Online (Sandbox Code Playgroud)

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


小智 12

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

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


nik*_*ola 5

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

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