一个数据库包含一个或多个命名
模式和架构包含表。模式也包含其他对象,包括数据
类型、
函数和
运算符。相同的对象名称可以用在不同的模式而不引起冲突;例如,两schema1和myschema可以包含一个表叫表与数据库、模式。不严格区分开来:一个
用户可以访问的对象在任何模式中的数据库
连接,只要他有
权限。
我们需要以下主要的
原因:
1)。允许多个用户使用数据库而不干扰其他用户。
2)。将数据库对象组织成逻辑组,使它们更易于
管理。
3)。第三方的应用可以放在不同的模式中,这样它们就不会与其他对象的名称发生冲突。
1。创造模式:
复制代码代码如下所示:
创建模式myschema;
通过上面的
命令,我们可以创建一个myschema命名模式。创建模式后,它可以拥有自己的一组逻辑对象,如表、视图和函数。
2。公共模式:
在
介绍后,我们需要解释公共模式第一。我们每次创建新的数据库,PostgreSQL将自动创建这种模式我们。当您
登录到数据库,我们将在该模式的形式
操作各种数据对象(公共),如:
复制代码代码如下所示:
产品表(…)相当于创建表public.products(…)
三.权限:
默认情况下,用户不能看到不在模式属于它们的所有对象,让他们看到,该模式需要在架构给出了使用权限的所有者。为了让用户在架构中使用的对象,我们可能需要提供额外的权限,只要对object.postgresql可提供不同的权限类型根据不同的对象,如:
复制代码代码如下所示:
授予所有图式myschema公共;
以上所有的关键词将包含创建和使用两个权限。如果公共模式的创建myschema模式的权限,用户登录到架构将能够创建在myschema模式的任何物体,如:
复制代码代码如下所示:
创建表(myschema.products
product_no整数,
名称
文本,
价格数字检查(价格> 0),
);
将权限授予模式中的所有表时,需要将权限拆分为不同的表操作,例如:
复制代码代码如下所示:
在图式myschema改变默认权限
允许插入、选择、更新、
删除、截断、引用、对表上的触发器;
当所有序列对象
都是模式的权限时,您需要将权限拆分成不同的序列操作,例如:
复制代码代码如下所示:
在图式myschema改变默认权限
授予选择,更新使用,在序列到公共;
当权限授予模式中的所有函数时,只考虑
执行权限,例如:
复制代码代码如下所示:
在图式myschema改变默认权限
函数授予公共执行;
你可以看到,建立在上面的公共模式的myschema图式的各种对象很不方便。接下来我们将介绍另一种方式,即通过角色对象,直接登陆,与myschema对象,然后我们可以创建各种对象直接在myschema模式。
复制代码代码如下所示:
创建角色myschema登录
密码为123456;-与模式相关的角色创建对象。
创建模式myschema授权myschema;-模式与指定角色
关联,模式名称和角色名称可以不相等。
Linux下的shell,登录到数据库中的角色myschema和成功登录到数据库的密码
正确时。
复制代码代码如下所示:
D中U myschema > psql
密码:
考试= >创建测试表(我的整数);
创建表
考试= > --看看这个模式和表的列表信息,模式具有查看权限。
表的关系
架构名称型业主| | |
------------ + --------- + ------ + ----------
myschema测试表myschema | | |
(1行)
4。删除模式:
复制代码代码如下所示:
删除模式myschema;
如果要删除模式及其所有对象,请使用级联删除:
复制代码代码如下所示:
myschema级联删除模式;
5。模式
搜索路径:
当我们使用数据库对象时,我们可以使用它的全名来定位对象。然而,这往往是很繁琐的,我们要owner_name.object_name每time.postgresql提供一种模式类型的搜索路径,这类似于在$路径
环境变量Linux,当我们执行一个shell命令,该命令仅为路径的
目录列表,我们可以通过命令名称直接执行,否则会需要
输入完整的路径name.postgresql还确定哪些表是通过寻找搜索路径表,这是一个需要抬头模式。第一个表中搜索路径的
发现将被视为选定的表。如果没有匹配的表的搜索路径,然后一个
错误据报道,即使匹配表的名称存在于该数据库的其他模式东南方.
搜索路径中的第一个模式称为当前模式。除了搜索的第一个模式之外,它也是新表在创建模式名称时不属于模式名称的模式:
复制代码代码如下所示:
考试= >
显示search_path;
search_path
----
$用户
(1行)
可以将新模式添加到搜索路径中,例如:
复制代码代码如下所示:
集search_path到myschema,公共;
为搜索路径
设置指定的模式,例如:
复制代码代码如下所示:
集search_path到myschema;-当前的搜索路径将只包括一个myschema模式。