问题:Postgresql COPY 命令给出权限被拒绝错误

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

该文件位于/tmp中。

我仍然收到错误消息:

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

我不明白我做错了什么,因为我发现的所有帖子都说如果我在/tmp中有文件并且所有者是postgres,那么COPY命令应该可以工作。

解答

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

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

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

setenforce 0

然后重新测试。跑:

setenforce 1

测试后重新启用 SELinux。setenforce不是永久的;无论如何,SELinux 将在重新启动时自动重新启用。永久禁用 SELinux 通常不是解决此类问题的好方法;如果您确认问题是 SELinux,则可以进一步探索。


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

Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐