PostgreSQL学习手册(二) 模式(Schema)
2019独角兽企业重金招聘Python工程师标准>>>
一个数据库包含一个或多个命名的模式,模式又包含表。模式还包含其它命名的对象,包括数据类型、函数,以及操作符。同一个对象名可以在不同的模式里使用而不会导致冲突; 比如,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:
MyTest=> CREATE TABLE test(i integer);
CREATE TABLE
MyTest=> \d --查看该模式下,以及该模式有权限看到的tables信息列表。
List of relations
Schema | Name | Type | Owner
------------+---------+------+----------
myschema | test | table | myschema
(1 rows)
4. 删除模式:
DROP SCHEMA myschema;
如果要删除模式及其所有对象,请使用级联删除:
DROP SCHEMA myschema CASCADE;
5. 模式搜索路径:
我们在使用一个数据库对象时可以使用它的全称来定位对象,然而这样做往往也是非常繁琐的,每次都不得不键入 owner_name.object_name。PostgreSQL中提供了模式搜索路径,这有些类似于Linux中的$PATH环境变量,当我们执行一个Shell命令时,只有该命令位于$PATH的目录列表中,我们才可以通过命令名直接执行,否则就需要输入它的全路径名。PostgreSQL同样也通过查找一个搜索路径来判断一个表究竟是哪个表,这个路径是一个需要查找的模式列表。在搜索路径里找到的第一个表将被当作选定的表。如果在搜索路径中没有匹配表,那么就报告一个错误,即使匹配表的名字在数据库其它的模式中存在也如此。
在搜索路径中的第一个模式叫做当前模式。除了是搜索的第一个模式之外,它还是在CREATE TABLE没有声明模式名的时候,新建表所属于的模式。要显示当前搜索路径,使用下面的命令:
MyTest=> SHOW search_path;
search_path
----------------
"$user",public
(1 row)
可以将新模式加入到搜索路径中,如:
SET search_path TO myschema,public;
为搜索路径设置指定的模式,如:
SET search_path TO myschema; --当前搜索路径中将只是包含myschema一种模式。
转载于:https://my.oschina.net/u/2436852/blog/537748
PostgreSQL学习手册(二) 模式(Schema)相关推荐
- PostgreSQL学习手册(五) 函数和操作符
PostgreSQL学习手册(五) 函数和操作符 一.逻辑操作符: 常用的逻辑操作符有:AND.OR和NOT.其语义与其它编程语言中的逻辑操作符完全相同. 二.比较操作符: 下面是Po ...
- PostgreSQL学习手册
PostgreSQL学习手册(数据表) http://www.cnblogs.com/stephen-liu74/archive/2011/12/16/2290803.html 一.表的定义 二.系统 ...
- PostgreSQL学习手册(角色和权限) 转
原文 PostgreSQL学习手册(角色和权限) PostgreSQL是通过角色来管理数据库访问权限的,我们可以将一个角色看成是一个数据库用户,或者一组数据库用户.角色可以拥有数据库对象,如表.索 ...
- PostgreSQL学习手册(数据库维护) 转
原文: PostgreSQL学习手册(数据库维护) 一.恢复磁盘空间: 在PostgreSQL中,使用delete和update语句删除或更新的数据行并没有被实际删除,而只是在旧版本数据行的物理地址上 ...
- [导入][转]sap学习手册二
SAP学习手册二 作者:sunxufeng 有没有调整IDES4.6的中文包参数的步骤呢? 在导入中文包后直接手工修改有关参数,不要用CZ10去修改假定为D盘,路径为D:usrsapC11syspro ...
- JavaScript 学习手册二
JavaScript 学习手册二:JS 数据类型 第1关:JavaScript 数据类型介绍 任务描述 本关任务:在函数 objectTest() 内部定义了六个变量 a.b.c.d.e.f,并已经赋 ...
- PostgreSQL学习手册(客户端命令Ⅱ)
为什么80%的码农都做不了架构师?>>> 七.pg_dump: pg_dump是一个用于备份PostgreSQL数据库的工具.它甚至可以在数据库正在并发使用时进行完整一致的备份 ...
- PostgreSQL学习手册(函数和操作符二)
转自:http://www.cnblogs.com/stephen-liu74/archive/2012/05/04/2294643.html 六.模式匹配: PostgreSQL中提供了三种 ...
- PostgreSQL学习手册(常用数据类型)
2019独角兽企业重金招聘Python工程师标准>>> 一.数值类型: 下面是PostgreSQL所支持的数值类型的列表和简单说明: 名字 存储空间 描述 范围 smallint 2 ...
最新文章
- 12月12日学习内容整理:Ajax中的contentType参数,csrf跨域请求处理,serialize方法...
- python【蓝桥杯vip练习题库】BASIC-24龟兔赛跑预测(模拟)
- python中ndarray和matrix
- 基于SSH2做一个24小时订单分析表格
- 03-02 capabilities 设置
- 3-1067. 试密码
- html文件是fla,FLASH 全屏、按ESC 退出全屏模式Fla及HTML源文件
- Android 更改头像(图片)并上传服务器功能Demo详解
- 今天七夕给大家送个“对象”吧!拿走不谢!
- 技术天才米勒 oracle,奇迹中的奇迹 WW之功能炫技篇
- 想学硬件,该学什么啊?
- 清华计算机系出了哪些牛人,清华大学16位学霸PK 简历吓坏网友
- 天气数据API接口记录
- 一般纳税人有限公司可以享受的税收优惠政策有哪些?
- rhel7 http实例
- Python复数属性和方法操作实例
- 好的代码结构是什么样的?
- Python .pyc的编译和反编译
- 手机里面的AP与BP
- 画线 css,CSS画线方法
热门文章
- python虚拟环境管理工具_Python虚拟环境和包管理工具Pipenv的使用详解--看完这一篇就够了...
- golang实现聊天室(一)
- 【剑指offer】_10二叉树和为某一路径值
- Linux下的C编程实战之文件系统编程
- 01-复杂度2 Maximum Subsequence Sum (25 分)
- 还有人不知道什么是AndroidX的吗?文末领取面试资料
- 吕玉琴考研指导电子版_【干货大放送】中国历代文学作品选阅读指导PDF
- Codeforces- Educational Codeforces Round 69
- 使用thinkPHP做注册程序的实例
- [JS 分析] 天_眼_查 字体文件