postgresql 数据库对象
服务
1
Postgresql是一种服务(守护进程)安装的.多个Postgresql服务可以运行于同一台服务器上,它们的端口不能重复,也不能共享同一个数据存储目录
database
1
每个Postgresql服务可以包含多个独立的database
schema
1
2
3database的下一层逻辑结构就是schema.
大多数对象是隶属于某个schema的,然后schema又隶属于某个database
在创建database时,postgresql会默认自动为其创建一个名为public的schemacatalog
1
2
3
4catalog是系统级的schema,用于存储系统函数和系统元数据
每个database创建好后,默认会有两个catalog:
* 一个名为pg_catalog,用于存储Postgresql系统自带的函数,表,系统视图,数据类型转换器以及数据类型定义等元数据
* 一个是information_schema,用于存储ANSI标准中所需求提供的元数据查询视图变量
1
变量是Postgresql统一配置机制(GUC)的一部分,是可以在多个级别设置的各种选项,这些级别包括服务级别,database级别以及其它级别
扩展包
1
2
3开发人员可以通过该机制将一组相关的函数,数据类型,数据类型转换器,用户自定义索引,表以及GUC等对象打包成一个功能扩展包,该扩展包可以整体安装或整体删除
安装扩展包可以指定到对应的database,而不必对所有database都安装一遍
安装扩展包可以指定安装到哪个schema,若不指定,会默认安装到public schema中表
1
2
3
4
5postgresql中,表先属于某个schema,schema又属于某个database,这样就构成了一个三级存储结构
postgresql的表支持两种强大的功能:
* 表继承,即一张表可以有父表,又可以有子表
* 创建一张表的同时,系统会自动为此表创建一种对应的自定义数据类型.
换句话说,你可以将某个完整的数据结构定义为一张表,然后将该表用作另一个表的一个列外部表和外部数据封装器
1
2
3外部表是一些虚拟表,通过它们可以直接在本地数据库中访问来自外部数据源的数据.只要数据映射关系配置正确,那么外部表的用法与普通表没有任何区别.
外部表支持映射到以下类型的数据源:CSV文件,另一个服务器的Postgresql表,SQL Server,Oracle这些异构数据库中的表,redis这样的nosql数据库
外部表映射关系的建立是通过配置外部数据封装器(FDW)实现的.FDW是Postgresql和外部数据源之间的"桥梁",可实现两边数据的互联互通表空间
1
2
3表空间是用于存储数据的物理空间
Postgresql将用于物理存储的表空间和用于逻辑存储的schema分开管理,二者之间无耦合关系.
这样就很容易在不影响业务逻辑的情况下,将database甚至是单张表和索引在不同物理驱动器之间进行移动视图
1
大多数关系型数据库都支持视图,通过视图可以大大简化复杂的查询逻辑,另外也可以通过对视图执行更新操作来修改其基表数据
函数
1
2postgresql中函数执行后的返回结果可以是一个标量值或几个记录集
可以在函数中对表数据进行修改,其他数据库对于这种会修改表记录的函数一般称为存储过程内置编程语言
1
2函数是以过程化语言(PL)编写的
Postgresql默认支持三种内置编程语言: SQL,PL/pgSQL,C语言运算符
1
运算符本质上是符号化的已命名函数,它需要一个或两个实参,底层有一个相应的函数来实现其运算逻辑
数据类型
1
Postgresql支持常见数据类型:整型,字符型,数组等等,同时还支持符合数据类型
数据类型转换器
1
2cast是数据类型转换器,就是将一种数据类型转换为另一种类型工具.
转换器在其底层其实是通过调用函数来实现真正的转换逻辑的,Postgresql的独到之处在于支持用户自定义转换器,这样就可以改变系统默认的转换逻辑序列
1
2
3序列控制serial数据类型的自动递增
在Postgresql中定义serial列时,postgresql会自动创建序列,但你很容易改变初始值,增量和下一个值
因为序列是独立对象,索引多个表可以共用一个序列对象行或记录
1
2行或记录这两个术语可以互换
在Postgresql中,记录 这个概念可以脱离表独立存在触发器
1
2触发器机制可以实现对数据修改事件的捕获,并在之后触发用户自定义操作行为
触发器的触发时机是可实现的,可以是语句级触发或者记录级触发,可以是修改前触发也可以是修改后触发规则
1
2规则是一种能够将一种动作替换为另一种动作的机制
Postgresql内部就是使用此机制来实现视图的