一个数据库包含一个或多个命名的模式,模式又包含表。模式还包含其它命名的对象,包括数据类型、函数,以及操作符。同一个对象名可以在不同的模式里使用而不会导致冲突; 比如,schema1和myschema都可以包含叫做mytable的表。和数据库不同,模式不是严格分离的:一个用户可以访问他所连接的数据库中的任意模式中的对象,只要他有权限。
我们需要模式有以下几个主要原因:
1). 允许多个用户使用一个数据库而不会干扰其它用户。
2). 把数据库对象组织成逻辑组,让它们更便于管理。
3). 第三方的应用可以放在不同的模式中,这样它们就不会和其它对象的名字冲突。
1. 创建模式:
CREATE SCHEMA myschema;
在介绍后面的内容之前,这里我们需要先解释一下public模式。每当我们创建一个新的数据库时,PostgreSQL都会为我们自动创建该模式。当登录到该数据库时,如果没有特殊的指定,我们将以该模式(public)的形式操作各种数据对象,如:
CREATE TABLE products ( ... ) 等同于 CREATE TABLE public.products ( ... )
GRANT ALL ON SCHEMA myschema TO public;
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;
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;
CREATE ROLE myschema LOGIN PASSWORD '123456'; --创建了和该模式关联的角色对象。 CREATE SCHEMA myschema AUTHORIZATION myschema; --将该模式关联到指定的角色,模式名和角色名可以不相等。
/> 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)
DROP SCHEMA myschema;
DROP SCHEMA myschema CASCADE;
我们在使用一个数据库对象时可以使用它的全称来定位对象,然而这样做往往也是非常繁琐的,每次都不得不键入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一种模式。
本文向大家介绍PostgreSQL copy 命令教程详解,包括了PostgreSQL copy 命令教程详解的使用技巧和注意事项,需要的朋友参考一下 报文介绍PostgreSQL copy 命令,通过示例展示把查询结果导出到csv文件,导入数据文件至postgresql。 1. copy命令介绍 copy命令用于在postgreSql表和标准文件系统直接传输数据。copy命令让PostgreSQ
本文向大家介绍PostgreSQL教程(一):数据表详解,包括了PostgreSQL教程(一):数据表详解的使用技巧和注意事项,需要的朋友参考一下 一、表的定义: 对于任何一种关系型数据库而言,表都是数据存储的最核心、最基础的对象单元。现在就让我们从这里起步吧。 1. 创建表: 2. 删除表: 3. 创建带有缺省值的表: 输出为:
主要内容:什么是数据库?,ORDBMS 术语,PostgreSQL 特征,相关资源PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。 PostgreSQL 开发者把它念作 post-gress-Q-L。 PostgreSQL 的 Slogan 是 "世界上最先进的开源关系型数据库"。 参考内容:PostgreSQL 10.1 手册 什么是数据库? 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。 每个数据
本文向大家介绍PostgreSQL教程(二十):PL/pgSQL过程语言,包括了PostgreSQL教程(二十):PL/pgSQL过程语言的使用技巧和注意事项,需要的朋友参考一下 一、概述: PL/pgSQL函数在第一次被调用时,其函数内的源代码(文本)将被解析为二进制指令树,但是函数内的表达式和SQL命令只有在首次用到它们的时候,PL/pgSQL解释器才会为其创建一个准备好的执行规划,随
PostgreSQL 模式(SCHEMA)可以看着是一个表的集合。 一个模式可以包含视图、索引、数据类型、函数和操作符等。 相同的对象名称可以被用于不同的模式中而不会出现冲突,例如 schema1 和 myschema 都可以包含名为 mytable 的表。 使用模式的优势: 允许多个用户使用一个数据库并且不会互相干扰。 将数据库对象组织成逻辑组以便更容易管理。 第三方应用的对象可以放在独立的模式
本文向大家介绍PostgreSQL教程(三):表的继承和分区表详解,包括了PostgreSQL教程(三):表的继承和分区表详解的使用技巧和注意事项,需要的朋友参考一下 一、表的继承: 这个概念对于很多已经熟悉其他数据库编程的开发人员而言会多少有些陌生,然而它的实现方式和设计原理却是简单易懂,现在就让我们从一个简单的例子开始吧。 1. 第一个继承表: capitals表继