在本章的剩余部分,我们将讨论你如何通过增加下面几种对象来扩展 Postgres SQL 查询语言:
函数
类型
操作符
聚集
Postgres 是可扩展的是因为它的操作是表驱动的. 如果你熟悉标准的关系系统,你知道它们把与数据库,表,字段 等信息存储在一个被称为系统表的地方.(有些系统称这些为数据字典). 这些表在用户面前表现为表,和其他表一样,只不过 DBMS 把它自己内部的信息存放在此. Postgres 和标准的关系型数据库的系统表有一个关键区别是 Postgres 在它的系统表里面存储了更多的信息 -- 不仅是关于表和列/字段的信息,而且还有关于它们的类型, 函数,访问方式等的信息.这些表可以被用户修改,而且由于 Postgres 的内部操作是以这些表为基础的,这就意味着 Postgres 可以被用户所扩展. 相比之下,传统的数据库系统只能通过修改 DBMS 内部的硬代码或装载由 DBMS 供应商提供的特殊的模块来扩展.
Postgres 还与大多数其他数据库管理器不同的是 它还可以通过动态装载的方法与用户书写的代码偶合在一起. 也就是说,用户可以把一个目标代码文件 (例如,一个编译好的 .o 文件或一个共享库) 声明为一个新类型或函数的实现, 这时 Postgres 将根据需要装载它们. 用 SQL 写的代码甚至更容易加入到服务器中去.这种可以 "动态地"更改其操作的能力使 Postgres 特别适合于新应用和新存储结构的快速定型.