一个数据库包含一个或多个命名的模式,模式又包含表。模式还包含其它命名的对象,包括数据类型、函数,以及操作符。同一个对象名可以在不同的模式里使用而不会导致冲突; 比如,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一种模式。
- 浏览: 199621 次
- 性别:
- 来自: 广州
最新评论
-
littlevine:
费斯汀格法则 -
zhongmin2012:
TDD测试驱动开发,推荐学习一个mock框架
测试驱动开发实践 - Test-Driven Development(转) -
littlevine:
总结得很好,学习了
软件测试活动 -
welcomezhang:
飘过~~~~
代码自动审查工具checkstyle,配合适应敏捷开发 -
zhongmin2012:
littlevine 写道学习了,写得很清晰
这个只是记录方便 ...
Linux文件权限常用操作
相关推荐
postgres-json-schema, PostgreSQL的JSON模式验证 postgres-json-schema postgres-json-schema允许在PostgreSQL中验证 JSON模式。 它作为 Pl/PgSQL 函数实现,你可以使用它作为检查约束来验证JSON列的格式。postgre
例如,系统中不仅有单个数据库的概念,每个数据库下还有多个模式(schema),每个模式下又包含各类对象,如表、视图等。逻辑备份还原时,可以通过导出文件的格式与函数指针的使用来实现对这些不同层级对象的备份与...
标题"PyPI 官网下载 | django-jsonb-schema-0.6.0.tar.gz"指的是在Python的包索引服务(Python Package Index,简称PyPI)上下载的一个名为“django-jsonb-schema”的软件包,版本号为0.6.0,其压缩格式为tar.gz。...
PostgreSQL学习手册(模式Schema) PostgreSQL学习手册(表的继承和分区) PostgreSQL学习手册(常用数据类型) PostgreSQL学习手册(函数和操作符<一>) PostgreSQL学习手册(函数和操作符<二>) PostgreSQL学习手册(函数和...
"Laravel开发-laravel-mongo-model-schema"项目就是针对这种情况,它旨在使MongoDB的数据操作与Laravel的Eloquent模式相匹配,让开发者可以像处理关系数据库那样方便地处理MongoDB。 Laravel的Eloquent ORM是基于...
本文将深入探讨PostgreSQL中的模式Schema。 首先,了解创建模式的方法。通过`CREATE SCHEMA`命令,用户可以创建自己的模式,例如创建名为`myschema`的模式,只需要输入`CREATE SCHEMA myschema;`。一旦模式创建完成...
1. **模式(Schema)对象**:逻辑上组织数据库对象的命名空间,可以用来实现数据库的隔离和权限管理。 2. **表(Table)对象**:存储数据的基本结构,可以包含各种数据类型的列。 3. **视图(View)对象**:虚拟的表...
后计划将Postgres模式转换为TypeScript接口MySQL实现: : 用法# to infer an entire schema$ npx postgres-schema-ts postgresql://postgres@localhost:5433/db ? currentSchema=public# to infer a specific table...
4. **适配器集成**:Schema可以适应多种数据库适配器,如MySQL、PostgreSQL、MongoDB等,使得跨数据库的操作变得简单。 **三、水线Schema的使用步骤** 1. **创建模型**:首先,开发者需要定义模型,包含模型名称、...
这一章节介绍了 PostgreSQL 的基本架构,包括数据存储结构、表空间、模式(schema)等概念,为理解后续章节打下坚实的基础。 ##### 1.3 创建数据库 在这一节中,将学习如何创建数据库,包括使用 SQL 语句创建数据库...
在Laravel框架中,`laravel-schema`是一个关键组件,用于处理数据库的模式构建和管理。这个组件,也称为Eloquent Schema,是Laravel ORM(对象关系映射)的一部分,它提供了一种简洁、优雅的方式来定义和操作数据库...
pg-tables-to-jsonschema 一个命令行实用程序和模块,用于将postgresql表转换为JSON模式。 对表使用进行json转换。 我之所以写这个模块,是因为我有一组类似REST的API,它们使用JSON模式进行输入和输出验证。 这些表...
在“laravel-spec-schema-master”这个压缩包中,可能包含了实现上述功能的源代码、示例、文档以及安装和使用的说明。通过研究和使用这个扩展,开发者可以更好地定制他们的Laravel项目,以适应特定数据库系统的特性...
PostgreSQL PostgreSQL PostgreSQL学习手册 学习手册 学习手册 (模式 Schema) Schema) .9 PostgreSQL PostgreSQL PostgreSQL学习手册 学习手册 学习手册 (表的继承和分区 表的继承和分区 表的继承和分区 表的继承和...
- **定义**: 模式是 PostgreSQL 中的一个概念, 类似于 MySQL 中的 Database 或 Oracle 中的 schema。 - **作用**: 便于管理和组织数据库对象。 2. **模式操作** - **创建模式**: `CREATE SCHEMA 模式名;` - **...
提供上下文管理器来修改为PostgreSQL和Oracle实现的活动 。 ###用法 作为上下文管理器: from sqlalchemy_sqlschema import maintain_schema with maintain_schema ( "my_schema" , session ): schema = ...
这种设计模式有助于减少数据冗余,提高数据结构的灵活性,尤其适合处理多态性或层次结构的数据。 在Laravel中,我们主要通过Eloquent ORM(对象关系映射)来操作数据库。尽管Eloquent默认并不直接支持PostgreSQL的...
PostgreSQL中的模式(Schema)是数据库中的一个逻辑结构,用于组织和存储数据。模式可以包含多个表、视图、索引、函数和触发器等对象。 表的定义 PostgreSQL中的表是数据库中的一个基本结构,用于存储数据。表可以...