关于PostgreSQL数据库中的表空间,user,role,权限,模式(schema)的概念.
转自:<<数据架构师的PostgreSQL修炼--高效设计开发与维护数据库应用>>
表空间:
在PG中,表空间是文件系统中位置的一个链接,也就是一个目录.
表空间是一个可以保存所有其他对象的容器,如表,索引等.
在很多情况下,这样的功能是很有用的.也就是说:在一个指定的位置保存数据,而不是在默认的位置.
存在如下一个场景:当我们用完初始化数据库集群所使用的分区上的空间时,就可以使用表空间.
另外一个适用的场景是:处于性能考虑,移动具体对象到速度不同的磁盘上.
可以在一个比较快磁盘的表空间上创建一组频繁访问的对象.
或者是,在比较快的磁盘上使用OLTP业务,在比较慢的磁盘上运行OLAP业务.
当我们初始化一个集群的时候,可以得到两个默认表空间,
一个表空间成为pg_default,所有用户创建的并且未指定一个表空间的对象讲在pg_default表空间内被创建.
pg_default表空间的位置PGDATA下的基础目录.
另一个表空间是pg_global,它持有集群(cluster)中所有数据库共享的系统表.
模式:
模式(schema):我们在pg数据库中创建的任何对象(表,索引,视图等)都会在一个模式下被创建.
当创建对象时,如果未指定模式,这些对象将会在默认的模式下被创建.这个模式叫做public.
一个例外情况是另一个模式首先出现在search_path中.
角色和权限
在pg中,一个角色几乎与一个用户相同.因为一个角色可以是用户,也可以是一个用户组.
create user命令等同于create role,除了一点:create user有隐含的login权限.而create role不会有该权限.
每个角色是整个cluster所共享的,角色不是某个数据库特有的.
为了在数据库实现有效操作,用户必须获得相关权限.
在pg中,权限可以针对数据库级别设定,也可以针对单个对象级别(表,视图,函数等)进行设定.
权限有select,delete,update,insert,execute
还有创建对象的权限,删除对象的权限
在pg中,可以把一个特定权限给一个user
也可以把一个特定权限给一个role
role的一个重要特点就是可以被继承.
举例:
我们可以创建一个report_user角色,然后在一组table中将select权限授予这个角色.
然后,为从事报告工作的每个人各自创建user,并将report_user 角色授权给这些user.
当其中一个user离开部门时,我们只要删除该用户所创建的登录即可.
注意:本文是写博客以来的第1001篇文章.文章的计算口径包括所有文章---原创,转载,翻译等等.