没有合适的资源?快使用搜索试试~ 我知道了~
首页PostgreSQL教程(二):模式Schema详解
PostgreSQL教程(二):模式Schema详解
738 浏览量
更新于2023-05-27
评论
收藏 69KB PDF 举报
一个数据库包含一个或多个命名的模式,模式又包含表。模式还包含其它命名的对象,包括数据类型、函数,以及操作符。同一个对象名可以在不同的模式里使用而不会导致冲突; 比如,schema1和myschema都可以包含叫做mytable的表。和数据库不同,模式不是严格分离的:一个用户可以访问他所连接的数据库中的任意模式中的对象,只要他有权限。 我们需要模式有以下几个主要原因: 1). 允许多个用户使用一个数据库而不会干扰其它用户。 2). 把数据库对象组织成逻辑组,让它们更便于管理。 3). 第三方的应用可以放在不同的模式中,这样它们就不会和其它对象的名字冲突。
资源详情
资源评论
资源推荐

PostgreSQL教程教程(二二):模式:模式Schema详解详解
一个数据库包含一个或多个命名的模式,模式又包含表。模式还包含其它命名的对象,包括数据类型、函数,以及操作符。同
一个对象名可以在不同的模式里使用而不会导致冲突; 比如,schema1和myschema都可以包含叫做mytable的表。和数据库
不同,模式不是严格分离的:一个用户可以访问他所连接的数据库中的任意模式中的对象,只要他有权限。
我们需要模式有以下几个主要原因:
1). 允许多个用户使用一个数据库而不会干扰其它用户。
2). 把数据库对象组织成逻辑组,让它们更便于管理。
3). 第三方的应用可以放在不同的模式中,这样它们就不会和其它对象的名字冲突。
1. 创建模式:创建模式:
代码如下:
CREATE SCHEMA myschema;
通过以上命令可以创建名字为myschema的模式,在该模式被创建后,其便可拥有自己的一组逻辑对象,如表、视图和函数
等。
2. public模式:模式:
在介绍后面的内容之前,这里我们需要先解释一下public模式。每当我们创建一个新的数据库时,PostgreSQL都会为我们
自动创建该模式。当登录到该数据库时,如果没有特殊的指定,我们将以该模式(public)的形式操作各种数据对象,如:
代码如下:
CREATE TABLE products ( … ) 等同于 CREATE TABLE public.products ( … )
3. 权限:权限:
缺省时,用户看不到模式中不属于他们所有的对象。为了让他们看得见,模式的所有者需要在模式上赋予USAGE权限。为
了让用户使用模式中的对象,我们可能需要赋予额外的权限,只要是适合该对象的。PostgreSQL根据不同的对象提供了不同
的权限类型,如:
代码如下:
GRANT ALL ON SCHEMA myschema TO public;
上面的ALL关键字将包含CREATE和USAGE两种权限。如果public模式拥有了myschema模式的CREATE权限,那么登录到
该模式的用户将可以在myschema模式中创建任意对象,如:
代码如下:
CREATE TABLE myschema.products (
product_no integer,
name text,
price numeric CHECK (price > 0),
);
在为模式下的所有表赋予权限时,需要将权限拆分为各种不同的表操作,如:
代码如下:
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema
GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES TO public;
在为模式下的所有Sequence序列对象赋予权限时,需要将权限拆分为各种不同的Sequence操作,如:
代码如下:
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema
GRANT SELECT, UPDATE, USAGE ON SEQUENCES TO public;
在为模式下的所有函数赋予权限时,仅考虑执行权限,如:
代码如下:
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema
GRANT EXECUTE ON FUNCTIONS TO public;
可以看出,通过以上方式在public模式下为myschema模式创建各种对象是极为不方便的。下面我们将要介绍另外一种方
式,即通过role对象,直接登录并关联到myschema对象,之后便可以在myschema模式下直接创建各种所需的对象了。
代码如下:
CREATE ROLE myschema LOGIN PASSWORD ‘123456’; –创建了和该模式关联的角色对象。
CREATE SCHEMA myschema AUTHORIZATION myschema; –将该模式关联到指定的角色,模式名和角色名可以不相
等。
在Linux Shell下,以myschema的角色登录到数据库MyTest,在密码输入正确后将成功登录到该数据库。
代码如下:
/> psql -d MyTest -U myschema
Password:



















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0