PostgreSQL学习---模式schema

小序

 接触PostgreSQL也有好长时间了,知识不总结梳理,似乎总不是自己的,继续努力吧少年!以此记录我的软件工艺之路!

模式(Schema)

一个 PostgreSQL 数据库集群 包含一个或多个命名的数据库。用户和用户组在整个集群的范围内 是共享的,但是其它数据并不是共享的。任何给定的与服务器的客户连接都只 能访问在一个数据库里的数据,就是那个在连接请求里声明的。

注意: 一个集群的用户并不一定要有访问集群内所有数据库的权限。 共享用户名的意思是不能有同名用户,也就是,在同一个集群里的两个 数据库里都有叫 joe 的用户;但是系统可以配置成 只允许 joe 访问某些数据库。

一个数据库包含一个或多个命名的 模式, 模式又包含表。模式还包含其它命名的对象,包括数据类型,函数, 以及操作符。同一个对象名可以在不同的模式里使用而不会导致冲突; 比如,schema1 和 myschema 都可以包含叫做 mytable 的表。和数据库不同,模式不是严格分离的: 一个用户可以访问他所连接的数据库中的任意模式中的对象, 只要他有权限。

我们需要模式的原因有好多:

允许多个用户使用一个数据库而不会干扰其它用户。

把数据库对象组织成逻辑组,让它们更便于管理。

第三方的应用可以放在不同的模式中, 这样它们就不会和其它对象的名字冲突。

模式类似于操作系统层次的目录,只不过模式不能嵌套。

创建一个schema

创建一个模式(schema)使用CREATE SCHEMA命令,如:

create schema demo_schema;

在指定模式里创建表,如:

CREATE TABLE myschema.mytable (
...
);

删除一个空的schema,如:

drop schema myschema;

删除一个模式以及模式里面所有的对象,如:

drop schema myschema CASCADE;

pulic schema(public 模式)

在创建表时,如果没有指定schema,则表会自动被归属到一个叫做'public‘的模式中,每一个数据库中都会有一个这样的模式。下面两种创建表的方式是等效的:

CREATE TABLE tableName(...);

CREATE TABLE public.tableName(...);

模式和权限

缺省时,用户看不到模式中不属于他们所有的对象。 为了让他们看得见,模式的所有者需要在模式上赋予 USAGE 权限。为了让用户使用模式中的对象,我们可能需要赋予额外的权限, 只要是适合该对象的。

用户也可以允许在别人的模式里创建对象。要允许这么做, 我们需要赋予在该模式上的 CREATE 权限。 请注意,缺省时,每个人都在 public 模式上 有 CREATE 权限。这样就允许所有可以连接到 指定数据库上的用户在这里创建对象。如果你不允许这么做, 你可以撤销这个权限:

REVOKE CREATE ON public FROM PUBLIC;

(第一个 "public" 是模式,第二个 "public" 意思是"所有用户"。 第一句里它是个标识符,而第二句里是个关键字,所以有不同的大小写)

模式搜索路径

全称的名字写起来非常费劲,并且我们最好不要在应用里直接 写上特定的模式名。因此,表通常都是用未修饰的名字 引用的,这样的名字里只有表名字。系统通过查找一个搜索路径 来判断一个表究竟是哪个表,这个路径是一个需要查找的模式列表。 在搜索路径里找到的第一个表将被当作选定的表。如果在搜索路径中 没有匹配表,那么就报告一个错误,即使匹配表的名字在数据库其它的 模式中存在也如此。

在搜索路径中的第一个模式叫做当前模式。除了是搜索的第一个模式之外, 它还是在 CREATE TABLE 没有声明模式名的时候,新建表所在的地方。

查看当前搜索路径,使用命令:

SHOW search_path;

在缺省的设置中,返回下面的东西:

 search_path
--------------
$user,public

第一个元素声明将要搜索一个和当前用户同名的模式。 因为还没有这样的模式存在,所以这条记录被忽略。第二个元素指向public模式。

要把新的模式放到路径中来,我们用

SET search_path TO myschema,public;

使用方式

模式可以以多种方式组织你的数据。下面是一些建议使用的模式, 它们也很容易在缺省配置中得到支持:

  • 如果你没有创建任何模式,那么所有用户隐含都访问public模式。 这样就模拟了还没有模式的时候的情景。这种设置建议主要用在 只有一个用户或者数据库里只有几个合作用户的情形。这样的设置 也允许我们平滑地从无模式的环境过渡。

  • 你可以为每个用户创建一个模式,名字和用户相同。要记得缺省的 搜索路径从$user开始,它会解析为用户名。 因此,如果每个用户都有一个独立的模式,那么他们缺省时访问他们 自己的模式。

  • 如果你使用了这样的设置,那么你可能还想撤销对public模式的访问 (或者一并删除了它),因此,用户就真的限制于他们自己的模式了。

  • 要安装共享的应用(被所有人使用的表,第三方提供的额外的函数等等), 我们可以把它们放到独立的模式中。只要记得给访问它们的用户赋予合适 的权限就可以了。然后用户就可以通过用一个模式名修饰这些名字来使用 这些额外的对象,或者他们可以把额外的模式放到他们的搜索路径中,由他们 定。

PostgreSQL学习----模式schema的更多相关文章

  1. oracle学习笔记(1)-三级模式SCHEMA

    oracle三级模式及二级映像 模式(schema)是数据库的一个名词,大部分的数据库在结构上都有三级模式的特征,了解下基本的概念,有助于后续深入的学习. 用老罗坚果pro发布会的话说就是,不罗嗦,先 ...

  2. PostgreSQL学习手册

    事实上之前有很长一段时间都在纠结是否有必要好好学习它,但是始终都没有一个很好的理由说服自己.甚至是直到这个项目最终决定选用PostgreSQL 时,我都没有真正意识到学习它的价值,当时只是想反正和其它 ...

  3. PostgreSQL学习手册(目录)

    原文地址:http://www.cnblogs.com/stephen-liu74/archive/2012/06/08/2315679.html 事实上之前有很长一段时间都在纠结是否有必要好好学习它 ...

  4. PostgreSQL学习----命令或问题小结

    PostgreSQL学习--命令或问题小结 小序 接触PostgreSQL也有好长时间了,知识不总结梳理,似乎总不是自己的,继续努力吧少年!以此记录我的软件工艺之路! 1,查看模式搜索路径 SHOW ...

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

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

  6. PostgreSQL的模式、表、空间、用户间的关系

    在平时的工作中,我们经常接触到数据库表和用户以及角色的使用,由于经常使用默认的数据库表空间和模式(Schema),所以我们往往忽略了数据库表空间和模式的概念以及作用. 接下来,先介绍一下模式和表空间的 ...

  7. 理解PostgreSQL的模式、表、空间、用户间的关系

    在平时的工作中,我们经常接触到数据库表和用户以及角色的使用,由于经常使用默认的数据库表空间和模式(Schema),所以我们往往忽略了数据库表空间和模式的概念以及作用. 接下来,先介绍一下模式和表空间的 ...

  8. Kafka Schema Registry | 学习Avro Schema

    1.目标 在这个Kafka Schema Registry教程中,我们将了解Schema Registry是什么以及为什么我们应该将它与Apache Kafka一起使用.此外,我们将看到Avro架构演 ...

  9. Oracle 用户(user)和模式(schema)的区别

    概述: (一)什么Oracle叫用户(user): A user is a name defined in the database that can connect to and access ob ...

随机推荐

  1. Eclipse中让Scala缩进变为4

    Windows->preference->Scala->Editor->Formatter->Spaces to indent

  2. How To Improve Deep Learning Performance

    如何提高深度学习性能 20 Tips, Tricks and Techniques That You Can Use ToFight Overfitting and Get Better Genera ...

  3. 产品相关 做产品VS做项目

    做产品VS做项目 by:授客 QQ:1033553122 相关定义 根据GB/T19000—2008<质量管理体系基础和术语>,有以下定义 过程process 一组将输入转化为输出的相互关 ...

  4. JSON学习笔记-1

    1.什么是JSON? JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一 ...

  5. 在Windows Server 2012中打开传统的磁盘管理界面

    在“运行”中输入diskmgmt.msc即可

  6. java 中解析json步骤

    一.   JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧. Json建构于两种结构:     1.“名称/值”对的集合(A collection ...

  7. 如何在Markdown文档中插入空格?

    简单说 在 Markdown 文档中,可以直接采用 HTML 标记插入空格(blank space),而且无需任何其他前缀或分隔符.具体如下所示: 插入一个空格 (non-breaking space ...

  8. 2.Java英文缩写详解

    1.JVM 2.JDK JRE 3.Java SE EE ME 4.OO OOP 5.IOC 6.SQL 7.POJO 1.JVM:Java Virtual Machine(Java虚拟机)的缩写. ...

  9. [C# | XML] XML 反序列化解析错误:<xml xmlns=''> was not expected. 附通用XML到类解析方法

    使用 XML 反化时出现错误: public static TResult GetObjectFromXml<TResult>(string xmlString) { TResult re ...

  10. MySQL案例07:MySQL5.7并发复制隐式bug

    我们MySQL线上环境大部分使用的是5.7.18的版本,这个版本已修复了很多bug,但针对主从复制的bug还是有很多的,尤其是一些组复制.并行复制的bug尤为突出,在5.7.19版本有做相应改善和修复 ...