为什么80%的码农都做不了架构师?>>>   

一个数据库包含一个或多个命名的模式,模式又包含表。模式还包含其它命名的对象,包括数据类型、函数,以及操作符。同一个对象名可以在不同的模式里使用而 不会导致冲突; 比如,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关键字将包含 CREATEUSAGE两种权限。如果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/junn/blog/598272

PostgreSQL学习手册(模式Schema)相关推荐

  1. PostgreSQL学习手册

    PostgreSQL学习手册(数据表) http://www.cnblogs.com/stephen-liu74/archive/2011/12/16/2290803.html 一.表的定义 二.系统 ...

  2. PostgreSQL学习手册(五) 函数和操作符

    PostgreSQL学习手册(五) 函数和操作符 一.逻辑操作符:     常用的逻辑操作符有:AND.OR和NOT.其语义与其它编程语言中的逻辑操作符完全相同. 二.比较操作符:     下面是Po ...

  3. PostgreSQL学习手册(角色和权限) 转

    原文 PostgreSQL学习手册(角色和权限)   PostgreSQL是通过角色来管理数据库访问权限的,我们可以将一个角色看成是一个数据库用户,或者一组数据库用户.角色可以拥有数据库对象,如表.索 ...

  4. PostgreSQL学习手册(数据库维护) 转

    原文: PostgreSQL学习手册(数据库维护) 一.恢复磁盘空间: 在PostgreSQL中,使用delete和update语句删除或更新的数据行并没有被实际删除,而只是在旧版本数据行的物理地址上 ...

  5. PostgreSQL学习手册(客户端命令Ⅱ)

    为什么80%的码农都做不了架构师?>>>    七.pg_dump: pg_dump是一个用于备份PostgreSQL数据库的工具.它甚至可以在数据库正在并发使用时进行完整一致的备份 ...

  6. PostgreSQL学习手册(二) 模式(Schema)

    2019独角兽企业重金招聘Python工程师标准>>> 一个数据库包含一个或多个命名的模式,模式又包含表.模式还包含其它命名的对象,包括数据类型.函数,以及操作符.同一个对象名可以在 ...

  7. PostgreSQL学习手册(常用数据类型)

    2019独角兽企业重金招聘Python工程师标准>>> 一.数值类型: 下面是PostgreSQL所支持的数值类型的列表和简单说明: 名字 存储空间 描述 范围 smallint 2 ...

  8. PostgreSQL学习手册(四) 常用数据类型

    一.数值类型:     下面是PostgreSQL所支持的数值类型的列表和简单说明: 名字 存储空间 描述 范围 smallint 2 字节 小范围整数 -32768 到 +32767 integer ...

  9. PostgreSQL学习手册(十一) 数据库管理

    一.概述:     数据库可以被看成是SQL对象(数据库对象)的命名集合,通常而言,每个数据库对象(表.函数等)只属于一个数据库.不过对于部分系统表而言,如 pg_database,是属于整个集群的. ...

  10. PostgreSQL学习手册(系统表)

    一.pg_class: 该系统表记录了数据表.索引(仍然需要参阅pg_index).序列.视图.复合类型和一些特殊关系类型的元数据.注意:不是所有字段对所有对象类型都有意义. 名字 类型 引用 描述 ...

最新文章

  1. C++多线程之间,线程函数启动之后,多线程依赖的启动和线程唤醒操作。
  2. leetcode算法题--预测赢家★
  3. poj 3177 Redundant Paths
  4. vim+python3的字符串却不能使用中文
  5. ABAP Development Tool前后台交互的原理
  6. PCB走线角度为90度到底行不行?
  7. Laravel Passport里的授权类型介绍
  8. 电脑qq收藏在哪里打开_外贸询盘怎么来?零成本用Linkedin批量开发客户!外贸人收藏...
  9. android 关闭软键盘_实现边到边的体验 | 让您的软键盘动起来 (一)
  10. 如何安装python_怎么在Windows操作系统下安装Python和Networkx
  11. 【大规模图像检索的利器】Deep哈希算法介绍
  12. 拯救行动第二季 - 答题赢游戏机活动已经开放!
  13. hibernate 反向生实体类 and 为什么老是多一个id
  14. 诺基亚N9开发者模式详解:谁的N9谁做主
  15. hotmail邮箱pop3server设置方法
  16. 联想G40-30进入PE鼠标键盘失灵解决方法
  17. 打印图像模糊问题解决方法
  18. 10大炫酷的HTML5文字动画特效欣赏
  19. Spring 夺命 35 问!
  20. 一个android工程师写java后台的感受

热门文章

  1. 最大子段和_算法与数据结构_Python
  2. CentOS6的python2.6升级到python2.7以上版本(可能更详细)
  3. easyUI datagrid 重复发送URL请求
  4. 爱的十个秘密--8.沟通的力量
  5. VUE 注册验证码页面实例
  6. Linux从入门到精通——Linux中的补充知识点
  7. vue 及sass安装
  8. 【POJ2888】Magic Bracelet Burnside引理+欧拉函数+矩阵乘法
  9. 移动应用UI设计模式pdf
  10. web中有关文档元素距离的几个jquery 宽度 width高度height 尺寸 属性