环境
系统平台:N/A
版本:6.0,4.5
文档用途
本文详细介绍数据库中的一个重要逻辑对象“模式”(英文名:schema)以及常见应用操作。
详细信息
(一)为什么要使用“模式”
将数据库对象根据需要划分成逻辑组便于管理;
允许多个用户在互不干扰的情况下使用同一个数据库;
能够用来避免对象名称冲突。
(二)形象化理解模式的概念
集簇 --> 集团
数据库 --> 集团旗下的公司,简称公司
模式 --> 公司下面的部门,简称部门
DBA --> CEO
用户 --> 经理
数据库owner --> 总经理
对象 --> 员工
你? --> 董事长 _
你是安装部署数据库的人,你最牛,你一句话就能把整个数据库集簇干掉。。。
作为集团的创始人的你,任命了一个CEO管理集团;后来创建了一个或多个公司,每个公司之间都是独立运营的;CEO又给每个公司设立了部门,任命了一些经理(其中有一个是公司的总经理),管理一个或多个部门;得有人干活,经理招聘了员工。
下面该立规矩了:
1、董事长能直接控制CEO、经理进入哪些公司;(你可以通过pg_hba.conf来限制哪个用户可以连接到哪个数据库);
2、每个部门的员工不允许重名,否则只能调到其他部门;(同一个模式中的对象,不允许重名);
3、经理未得到部门授权情况下不能与其他部门的员工对话;(需要得到模式的使用权限才能进入模式操作);
4、如果得到了部门授权,员工必须是该经理的下属,或者得到该员工的上级经理同意,才能进行对话;(数据库用户只能访问自己所拥有的对象,否则需要得到对象权限才可以操作);
(三)模式的一些常用操作
1.创建模式
CREATE SCHEMA myschema;
CREATE SCHEMA schema_name AUTHORIZATION user_name;
注意:模式命名的时候不要以pg_开头,以防与系统目录对象命名冲突。
2.删除模式
--删除空模式
DROP SCHEMA myschema;
--删除模式同时删除模式包含的对象(这个操作要慎重,确保删除的都是要删除的对象)
DROP SCHEMA myschema CASCADE;
3.模式授权
授予其他用户使用模式的权限
GRANT USAGE ON SCHEMA myschema TO user1;
收回用户的对模式的使用权限
REVOKE USAGE ON SCHEMA myschema FROM user1;
说明:模式不授权使用,模式下的对象即便是该用户的也无法访问。
4.使用模式
schema.table
5.公共模式
每个新的数据库都包含这样的一个公共模式“public”。没有指定任何模式名称的情况下,这样的表(和其他对象)会自动放入public下。
public模式的使用权限是开放给所有用户的(即:PUBLIC),创建一个新用户,即对public具有使用权限,可以创建删除自己的对象。
6.搜索路径
查看当前连接的搜索路径:
SHOW search_path;
在默认设置中,这将返回:
search_path
--------------
"$user", public
修改默认搜索路径:
set search_path to "$user",public;
修改用户的搜索路径:
ALTER ROLE user SET search_path = "$user";
注意:如果修改了用户的搜索路径,即便是通过set命令修改了,当前会话也生效了,下次登录该用户还是会使用用户自己的搜索路径。