使用 COPY FROM 时 psql 拒绝访问文件

Pet*_*ete 7 postgresql psql csv

当我这样做时:

COPY "mytable" FROM '/my/file.csv' WITH DELIMITER AS ',' CSV;
Run Code Online (Sandbox Code Playgroud)

关于这一点:

-rw-r--r-- 1 peter peter 54819176 2011-07-21 13:17 file.csv
Run Code Online (Sandbox Code Playgroud)

psql 告诉我这个:

ERROR:  could not open file "/my/file.csv" for reading: Permission denied
Run Code Online (Sandbox Code Playgroud)

我怎样才能读取我的文件?谢谢!

- - 更新

看起来apparmor在 Ubuntu 中默认安装了一个叫做的东西。
似乎与评论中提到的 SELinux 具有相同的功能。

- - 更新

删除后apparmor,我仍然遇到同样的问题。 selinux未安装。

关于下面关于访问的评论,COPY FROM 正在从超级用户帐户运行(如果没有,它会给出不同的错误消息)和上面复制的文件权限,我理解为“每个人都可读”。

- - 更新

我试图访问postgres用户下的文件。它卡在树的特定位置

drwxr--r-- 6 peter peter 4096 2011-04-14 14:03 phm

postgres@dexter:/home/peter/PyPacks$ cd phm

bash: cd: phm: Permission denied

我想我会把文件放在其他地方,但这很奇怪!

Bru*_*uno 10

drwxr--r-- 6 peter peter 4096 2011-04-14 14:03 phm

postgres@dexter:/home/peter/PyPacks$ cd phm

bash: cd: phm: Permission denied
Run Code Online (Sandbox Code Playgroud)

目录需要是可执行的才能 cd 进入它们(或使用其中的文件)。从/到 的所有子目录都/home/peter/PyPacks/phm需要由您要使用的用户执行才能工作。

至少尝试chmod 711 phm(应该给你rwx--x--x),或者chmod 755 phmrwxr-xr-x)。r目录是列出其内容的能力,而不是进入它们(或使用其中的文件/目录)。


小智 6

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

\copy打开文件并将内容提供给服务器,而copy告诉服务器打开文件本身并读取它,这可能会在权限方面出现问题,或者如果客户端和服务器运行在不同的计算机上且中间没有文件共享,则这甚至是不可能的。

在底层,\copy它的实现方式COPY FROM stdin与服务器端相同,并且接受相同的选项COPY

来自/sf/ask/1362415211/