Postgresql COPY命令给出Permissions denied错误

use*_*690 3 postgresql copy permission-denied

我正在尝试将COPY文件放入PostgreSQL中的表中.表所有者是postgres,文件所有者是postgres.

该文件在/tmp.

我仍然收到错误消息:

无法打开文件"/ tmp/file"进行阅读:权限被拒绝

我不明白我做错了什么,因为我发现的所有帖子都说如果我有文件/tmp和所有者postgres那么COPY命令应该有效.

Cra*_*ger 6

猜测:您正在使用Fedora,Red Hat Enterprise Linux,CentOS,Scientific Linux或默认情况下启用SELinux的其他发行版之一.

在您的特定操作系统/版本上,PostgreSQL的SELinux策略不允许服务器读取PostgreSQL数据目录之外的文件,或者文件是由目标策略覆盖的服务创建的,因此它有一个PostgreSQL不是的标签允许阅读.

您可以通过以root身份运行来确认这是否是问题所在:

setenforce 0
Run Code Online (Sandbox Code Playgroud)

然后重新测试.跑:

setenforce 1
Run Code Online (Sandbox Code Playgroud)

测试后重新启用SELinux.setenforce不是永久的; 无论如何,SELinux将在重启时自动重新启用.对于这样的问题,永久禁用SELinux通常不是一个好的解决方案; 如果你确认问题是SELinux,可以进一步探讨.


由于您没有指定您正在使用的操作系统或版本,PostgreSQL版本,您正在运行的确切命令,ls -al文件,\d+表格等,因此很难提供更多详细信息,或者知道这是否更多而不是猜测.尝试更新您的答案,以包括所有ls --lcontext文件和文件.

  • @ user1439690太好了,现在你知道它是SELinux.`setenforce`是一个*临时*措施.正确的解决方法是设置文件的SELinux上下文.请参阅https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Security-Enhanced_Linux/chap-Security-Enhanced_Linux-SELinux_Contexts.html (2认同)