Greenplum 从入门到放弃(四)
PostgreSQL与Greenplum的关系
PostgreSQL
PostgreSQL是一种非常先进的对象–关系型数据库管理系统(ORDBMS),是目前功能最强大,特性最丰富和技术最先进的自由软件数据库系统之一,其某些特性甚至连商业数据库都不具备。
PostgreSQL的特点可以说是数不胜数,称其为最先进的开
源软件数据库当之无愧,支持绝大部分的主流数据库特性,主
要体现在如下几方面:
- 函数/存储过程
PostgreSQL对非常丰富的过程类语言提供支持,可以编写自定义函数/存储过程
- 内置的plpgsql,一种类似Oracle的PLsql的语言
- 支持的脚本语言有:PL/Lua、PL/LOLCODE、PL/Perl、PL/HP、PL/Python、PL/Ruby、PL/sh、PL/Tcl和PL/Scheme。、
- 编译语言有C、C++和JAVA。
- ·统计语言PL/R
- 索引
PostgreSQL支持用户定义的索引访问方法,并且内置了Btree、哈希和GiST索引。PostgreSQL中的索引有下面几个特点:
- 可以从后向前扫描
- 可以创建表达式索引
- 部分索引
- 触发器
触发器是由SQL查询的动作触发的事件。比如,一个INSERT查询可能激活一个检查输入值是否有效的触发器。大多数触发器都只对INSERT或者UPDATE查询有效。PostgreSQL完全支持触发器,可以附着在表上,但是不能在视图上。不过视图可以有规则。多个触发器是按照字母顺序触发的。我们还可以用其他过程语言书写触发器函数,不仅仅PL/PgSQL。
- 并发管理(MVCC)
PostgreSQL的并发管理使用的是一种叫做“MVCC”(多版本并发机制)的机制,这种机制实际上就是现在在众多所谓的编程语言中极其火爆的“Lock Free”,其本质是通过类似科幻世界的时空穿梭的原理,给予每个用户一个自己的“时空”
,然后通过原子的“时空”控制来控制时间基线,并以此控制并发更改的可见区域,从而实现近乎无锁的并发,而同时还能在很大程度上保证数据库的ACID特性。
- 规则(RULE)
规则允许我们对由一个查询生成的查询树进行改写。
- 数据类型
PostgreSQL支持非常广泛的数据类型,包括:
- 任意精度的数值类型;
- 无限长度的文本类型;
- 几何原语;
- IPv4和IPv6类型;
- CIDR块和MAC地址;
- 数组。
用户还可以创建自己的类型,并且可以利用GiST框架把这些类型做成完全可索引的,比如来自PostGIS的地理信息系统(GIS)的数据类型。
- 用户定义对象
因为PostgreSQL使用一种基于系统表的可扩展的结构设计,所以PostgreSQL内部的几乎所有对象都可以由用户定义,这些对象包括:
- 索引;
- 操作符(内部操作符可以被覆盖);
- 聚集函数;
- 域;
- 类型转换;
- 编码转换。
- 继承
PostgreSQL的表是可以相互继承的。一个表可以有父表,
父表的结构变化会导致子表的结构变化,而对子表的插入和数
据更新等也会反映到父表中。
- 其他特性与扩展
- 二进制和文本大对象存储;
- 在线备份;
- TOAST(The Oversized-Attribute Storage Technique)用于透明地在独立的地方保存大的数据库属性,当数据超过一定大小的时候,会自动进行压缩以节省空间;
- 正则表达式。
此外PostgreSQL还有大量的附加模块和扩展版本,比如,多种不同的主从/主主复制方案:
- Slony-I;
- pgcluster;
- Mammoth replicator;
- Bucardo。