Chapter 33. 扩展 SQL

Table of Contents
33.1. 扩展性是如何实现的
33.2. PostgreSQL 类型系统
33.2.1. 基本类型
33.2.2. 复合类型
33.2.3.
33.2.4. 伪类型
33.2.5. 多态类型
33.3. 用户定义函数
33.4. 查询语言(SQL)函数
33.4.1. 基本类型上的 SQL 函数
33.4.2. 复合类型的SQL函数
33.4.3. 当做表数据源的 SQL 函数
33.4.4. 返回集合的 SQL 函数
33.4.5. 多态的 SQL 函数
33.5. 过程语言函数
33.6. 内部函数
33.7. C 语言函数
33.7.1. 动态装载
33.7.2. 基本类型的 C 语言函数
33.7.3. C 语言函数的版本-0 调用风格
33.7.4. C 语言函数的版本-1调用风格
33.7.5. 书写代码
33.7.6. 编译和链接动态链接的函数
33.7.7. 复合类型的 C 语言函数
33.7.8. 从 C 函数里返回行(复合类型)
33.7.9. 从 C 语言函数里返回集合
33.7.10. 多态参数和返回类型
33.8. 函数重载
33.9. 用户定义聚集
33.10. 用户定义类型
33.11. 用户定义操作符
33.12. 操作符优化信息
33.12.1. COMMUTATOR
33.12.2. NEGATOR
33.12.3. RESTRICT
33.12.4. JOIN
33.12.5. HASHES
33.12.6. MERGES (SORT1, SORT2, LTCMP, GTCMP)
33.13. 扩展索引接口
33.13.1. 索引方法和操作符表
33.13.2. 索引方法策略
33.13.3. 索引方法支持过程
33.13.4. 例子
33.13.5. 操作符表的特殊特性

在本章的剩余部分,我们将讨论你如何通过增加下面几种对象来扩展 PostgreSQL SQL 查询语言:

33.1. 扩展性是如何实现的

PostgreSQL 是可扩展的是因为它的操作是表驱动的. 如果你熟悉标准的关系数据库系统,你知道它们把与数据库,表,字段 等信息存储在一个被称为系统表的地方.(有些系统称这些为数据字典). 这些表在用户面前表现为表,和其他表一样,只不过 DBMS 把它自己内部的信息存放在此. PostgreSQL 和标准的关系型数据库的系统表有一个关键区别是 PostgreSQL 在它的系统表里面存储了更多的信息: 不仅是关于表和列/字段的信息,而且还有关于它们的类型, 函数,访问方式等的信息.这些表可以被用户修改,而且由于 PostgreSQL 的内部操作是以这些表为基础的,这就意味着 PostgreSQL 可以被用户所扩展. 相比之下,传统的数据库系统只能通过修改 源代码内部的硬代码或装载由 DBMS 供应商提供的特殊的模块来扩展.

PostgreSQL 它还可以通过动态装载的方法与用户书写的代码偶合在一起. 也就是说,用户可以把一个目标代码文件 (例如,一个共享库) 声明为一个新类型或函数的实现, 这时 PostgreSQL 将根据需要装载它们. 用 SQL 写的代码甚至更容易加入到服务器中去.这种可以 "在线"更改其操作的能力使 PostgreSQL 特别适合于新应用和新存储结构的快速定型.