表空间的操做系统目录

       PostgreSQL中的表空间是数据库中定义的一个文件系统中的位置,一旦定义成功以后,用户能够经过指定表空间名字的形式在表空间中建立新对象。

       前置条件:
一、文件系统中,该目录已经存在
lihao=# create tablespace postgres location '/home/lihao/db/pgsql/tbs';
ERROR: directory "/home/lihao/db/pgsql/tbs" does not exist

二、权限
1)、建立权限
         仅需保证成功经过pg_ctl命令启动数据库的操做系统用户为该表空间目录的属主便可。与:
         a)、调用psql的操做系统用户所属的组(含主组、附加组),与该目录的用户组无关
         b)、调用psql的操做系统用户,与该目录的属主无关
         c)、启动数据库的操做系统用户对该目录是否有读、写、执行权限无关;且此时建立成功以后,会自动将该目录的权限修改成属主读、写、可执行。以下图:sql

          

三、引伸:数据库启动时的data目录权限
1)、data目录必须为0700权限,且仅能为0700
2)、知足条件1的前提下,执行pg_ctl命令的操做系统用户是该目录的属主,与用户组(执行命令的用户所属的主组/附加组,目录所属的用户组)无关

四、引伸:pg_ctl命令的使用权限
1)、非root用户
2)、普通用户(能够是root组,含主组、附加组)只要能找到该命令,及命令的扩展lib库,便可调用数据库

       注意事项:post

       数据库在启动状态下,将表空间目录修改成0000权限,在stop数据库时会以fast模式进行,这种模式的关闭会形成在线事务回滚,甚至形成用户数据丢失。spa

相关文章
相关标签/搜索