PostgreSQL创建表空间没有权限

 mobiledu2502921033 发布于 2023-02-13 14:52

我为PostgreSQL创建表空间时遇到了问题.以下是步骤:

    mkdir /postgres

    chown postgres.postgres /postgres

    su - postgres

    psql

    create tablespace p1 location '/postgres'

在这一步中我得到一个错误:

could not set permissions on directory "/postgres": Permission denied

目录所有权是正确的:

[root@dev ~]# ls -la /postgres  
??? 8  
drwxr-xr-x.  2 postgres postgres 4096 12?  2 13:17 . 
dr-xr-xr-x. 28 root     root     4096 12?  3 06:57 .. 

用户是 postgres

[root@dev contrib]# ps -ef|grep postgres  
postgres  1971     1  0 08:21 ?        00:00:01 /usr/bin/postmaster -p 5432 -D /var/lib/pgsql/data

我在CentOS上运行.

修复:setenforce 0

1 个回答
  • 粗略猜测我会说你在Mac OS X上,你的PostgreSQL以用户身份运行postgres_(注意下划线),就像一些PostgreSQL软件包一样.

    ps -ef | grep postgres或者ps aux|grep postgres应该向您显示服务器正在运行的用户.确保该目录归该用户所有.

    根据评论中的额外信息进行更新:

    您使用的是CentOS,而不是Mac OS X.您的PostgreSQL以用户身份运行postgres,该用户与目录的所有者相同.因此,您似乎可能遇到SELinux问题.如果仅出于测试目的,您运行:

    setenforce 0
    

    然后你能运行CREATE TABLESPACE命令吗?(DROP在SELinux暂时关闭后创建表空间;如果没有,重启,PostgreSQL将无法启动).

    如果SELinux暂时禁用创建失败,则必须从SELinux策略中豁免PostgreSQL,在SELinux策略允许的位置创建表空间,或者在表空间目录中设置适当的SELinux属性,以便PostgreSQL可以对其进行操作.或者你可以完全关闭SELinux,但这并不是真的可取.

    在dmesg中,或者在CentOS的SELinux帮助工具中,可能会有一些提示告诉您可以打开或关闭的特定SELinux布尔值来控制它.请参阅setsebool命令帮助,Fedora安全指南,CentOS SELinux howto等.

    也许最好的选择是只更改文件的SELinux上下文.请参阅文档.您可以使用chcon,但在文件系统重新标记后,更改将丢失.最好使用semanage链接手册下一页中讨论的内容.

    2023-02-13 14:54 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有