当我这样做时:
COPY "mytable" FROM '/my/file.csv' WITH DELIMITER AS ',' CSV;
对此:
-rw-r--r-- 1 peter peter 54819176 2011-07-21 13:17 file.csv
psql 告诉我这个:
ERROR: could not open file "/my/file.csv" for reading: Permission denied
我怎样才能阅读我的文件?谢谢!
- - 更新
看起来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
我想我会把文件放在其他地方,但这很奇怪!
目录需要是可执行的才能进入它们(或使用其中的文件)。
/
从到 的所有子目录都/home/peter/PyPacks/phm
需要由您要用于此工作的用户执行。至少尝试
chmod 711 phm
(应该给你rwx--x--x
),或者也许chmod 755 phm
(rwxr-xr-x
)。r
for 目录是列出其内容的能力,而不是进入它们(或使用其中的文件/目录)。假设是
psql
命令行工具,您可以使用\copy
而不是copy
.\copy
打开文件并将内容提供给服务器,而copy
告诉服务器打开文件本身并读取它,这可能在权限方面有问题,如果客户端和服务器在不同的机器上运行而没有文件共享,甚至是不可能的.在幕后,
\copy
被实现为COPY FROM stdin
并接受与服务器端相同的选项COPY
。来自https://stackoverflow.com/questions/19463074/postgres-error-could-not-open-file-for-reading-permission-denied
在 Linux 上,用户 postgres 必须具有读取文件和执行目录的权限。它还需要重新启动 PSQL 服务器。
如果您使用的是 Mac,请将 csv 文件放在“/tmp”目录中。在这种情况下,所有用户(例如 pgadmin)都可以访问该文件。