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