我为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
答案 0 :(得分:5)
我猜测你是在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 Security Guide,CentOS SELinux howto等。
也许最好的选择是只更改文件的SELinux上下文。见the documentation。您可以使用chcon
,但在文件系统重新标记后,更改将丢失。最好使用链接手册下一页中讨论的semanage
。