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关键字将包含 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/u/2436852/blog/537748

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

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

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

  2. PostgreSQL学习手册

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

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

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

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

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

  5. [导入][转]sap学习手册二

    SAP学习手册二 作者:sunxufeng 有没有调整IDES4.6的中文包参数的步骤呢? 在导入中文包后直接手工修改有关参数,不要用CZ10去修改假定为D盘,路径为D:usrsapC11syspro ...

  6. JavaScript 学习手册二

    JavaScript 学习手册二:JS 数据类型 第1关:JavaScript 数据类型介绍 任务描述 本关任务:在函数 objectTest() 内部定义了六个变量 a.b.c.d.e.f,并已经赋 ...

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

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

  8. PostgreSQL学习手册(函数和操作符二)

    转自:http://www.cnblogs.com/stephen-liu74/archive/2012/05/04/2294643.html 六.模式匹配:     PostgreSQL中提供了三种 ...

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

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

最新文章

  1. 12月12日学习内容整理:Ajax中的contentType参数,csrf跨域请求处理,serialize方法...
  2. python【蓝桥杯vip练习题库】BASIC-24龟兔赛跑预测(模拟)
  3. python中ndarray和matrix
  4. 基于SSH2做一个24小时订单分析表格
  5. 03-02 capabilities 设置
  6. 3-1067. 试密码
  7. html文件是fla,FLASH 全屏、按ESC 退出全屏模式Fla及HTML源文件
  8. Android 更改头像(图片)并上传服务器功能Demo详解
  9. 今天七夕给大家送个“对象”吧!拿走不谢!
  10. 技术天才米勒 oracle,奇迹中的奇迹 WW之功能炫技篇
  11. 想学硬件,该学什么啊?
  12. 清华计算机系出了哪些牛人,清华大学16位学霸PK 简历吓坏网友
  13. 天气数据API接口记录
  14. 一般纳税人有限公司可以享受的税收优惠政策有哪些?
  15. rhel7 http实例
  16. Python复数属性和方法操作实例
  17. 好的代码结构是什么样的?
  18. Python .pyc的编译和反编译
  19. 手机里面的AP与BP
  20. 画线 css,CSS画线方法

热门文章

  1. python虚拟环境管理工具_Python虚拟环境和包管理工具Pipenv的使用详解--看完这一篇就够了...
  2. golang实现聊天室(一)
  3. 【剑指offer】_10二叉树和为某一路径值
  4. Linux下的C编程实战之文件系统编程
  5. 01-复杂度2 Maximum Subsequence Sum (25 分)
  6. 还有人不知道什么是AndroidX的吗?文末领取面试资料
  7. 吕玉琴考研指导电子版_【干货大放送】中国历代文学作品选阅读指导PDF
  8. Codeforces- Educational Codeforces Round 69
  9. 使用thinkPHP做注册程序的实例
  10. [JS 分析] 天_眼_查 字体文件