PostgreSQL学习----模式schema
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的更多相关文章
- oracle学习笔记(1)-三级模式SCHEMA
oracle三级模式及二级映像 模式(schema)是数据库的一个名词,大部分的数据库在结构上都有三级模式的特征,了解下基本的概念,有助于后续深入的学习. 用老罗坚果pro发布会的话说就是,不罗嗦,先 ...
- PostgreSQL学习手册
事实上之前有很长一段时间都在纠结是否有必要好好学习它,但是始终都没有一个很好的理由说服自己.甚至是直到这个项目最终决定选用PostgreSQL 时,我都没有真正意识到学习它的价值,当时只是想反正和其它 ...
- PostgreSQL学习手册(目录)
原文地址:http://www.cnblogs.com/stephen-liu74/archive/2012/06/08/2315679.html 事实上之前有很长一段时间都在纠结是否有必要好好学习它 ...
- PostgreSQL学习----命令或问题小结
PostgreSQL学习--命令或问题小结 小序 接触PostgreSQL也有好长时间了,知识不总结梳理,似乎总不是自己的,继续努力吧少年!以此记录我的软件工艺之路! 1,查看模式搜索路径 SHOW ...
- PostgreSQL学习手册(五) 函数和操作符
PostgreSQL学习手册(五) 函数和操作符 一.逻辑操作符: 常用的逻辑操作符有:AND.OR和NOT.其语义与其它编程语言中的逻辑操作符完全相同. 二.比较操作符: 下面是Post ...
- PostgreSQL的模式、表、空间、用户间的关系
在平时的工作中,我们经常接触到数据库表和用户以及角色的使用,由于经常使用默认的数据库表空间和模式(Schema),所以我们往往忽略了数据库表空间和模式的概念以及作用. 接下来,先介绍一下模式和表空间的 ...
- 理解PostgreSQL的模式、表、空间、用户间的关系
在平时的工作中,我们经常接触到数据库表和用户以及角色的使用,由于经常使用默认的数据库表空间和模式(Schema),所以我们往往忽略了数据库表空间和模式的概念以及作用. 接下来,先介绍一下模式和表空间的 ...
- Kafka Schema Registry | 学习Avro Schema
1.目标 在这个Kafka Schema Registry教程中,我们将了解Schema Registry是什么以及为什么我们应该将它与Apache Kafka一起使用.此外,我们将看到Avro架构演 ...
- Oracle 用户(user)和模式(schema)的区别
概述: (一)什么Oracle叫用户(user): A user is a name defined in the database that can connect to and access ob ...
随机推荐
- nginx 错误日志分析
502 1.查看nginx错误日志 tailf /data/log/nginx/error.log // :: [error] #: * recv() failed (: Connection res ...
- 【java基础】 == 和 equals() 的区别
==号和equals()方法都是比较是否相等的方法,那它们有什么区别和联系呢? 首先,==号在比较基本数据类型(指的值类型)时比较的是值,而用==号比较两个对象时比较的是两个对象的地址值: int x ...
- span与a元素的键盘聚焦性以及键盘点击性研究——张鑫旭
一.众所周知的与不为所知的 我们平时涉及点击交互事件的时候,都是使用的a元素或者button元素,原因是可以相应键盘focus效果以及回车触发点击事件,这是众所周知的. 但是,可能存在一些特殊情况,我 ...
- Java方法的参数传递方式为: 值传递
Java方法的参数传递方式为: 值传递 对于基本数据类型作为参数传递时, 是"按值传递", 这点都认识很清楚. 但是, 当对象或者说引用作为参数传递, Java 的参数传递方式是& ...
- Wannafly挑战赛9 E - 组一组
链接:https://www.nowcoder.net/acm/contest/71/E来源:牛客网 题目描述 有一个长为 n 的数列 A,其中有 m 个限制条件,条件有两种: 1.对于区间 [l,r ...
- mysql 删除某一个数据库下面的所有表,但不删除数据库
删除某一个数据库下面的所有表,但不删除数据库.该语句经过从concat拼接,最后查询出来的是删除表的语句,然后执行那些查询出来的语句就ok了select concat(‘drop table ‘,ta ...
- git使用总结(常用命令)
前言 写这篇文章的目的是让新手能够操作git管理自己的代码,可能你知道git的各种命令但是对其使用顺序并不熟,比如我.所以有必要整合一篇关于命令使用步骤的文章,图片用的人家的,也没询问让不让用,可能会 ...
- ArcGIS10.3+Oracle12C+ArcGIS Server10.3安装布署(之三)
1.将Oracle的客户端切换到64位 (1)将C:\下的instantclient_12_1目录重命名为instantclient_12_1X86 (2)从Oracle的官方网站下载 insta ...
- Linux sar命令工具详细介绍
sar命令工具详细介绍 by:授客 QQ:1033553122 由于篇幅限制,采用网盘分享, 下载地址: sar命令工具详细介绍.pdf
- ORACLE EXPDP命令使用详细
相关参数以及导出示例: 1. DIRECTORY 指定转储文件和日志文件所在的目录DIRECTORY=directory_objectDirectory_object用于指定目录对象名称.需要注意,目 ...