PostgreSQL7.0手册-程序员手册 -37. 扩展的 SQL: 概述

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 13:44:31
第三十七章. 扩展 SQL:概述
内容 
扩展性是如何工作的 
Postgres 类型系统 
关于 Postgres 系统表 
在本章的剩余部分,我们将讨论你如何通过增加下面几种对象来扩展 PostgresSQL查询语言: 
函数
类型
操作符 

聚集

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


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

Postgres 类型系统
Postgres 的类型系统可以有好几种方法分解开来.类型可以分为基本类型和复合类型.基本类型是那些用象C 这样的语言实现的(例如 int4)。这些数据类型通常与那些常被认为是"抽象数据类型"的类型对应;Postgres 对这些数据类型只能通过用户提供的方法来操作,并且对这些数据类型的特性的理解只限于用户所描述的范围.复合类型是当用户创建表时创建的,EMP是复合类型的一个例子. 
Postgres 对这些类型的存储方法只有一种(在存储表的所有记录的文件里),但是用户可以从查询语言中"深入观察"这些属性,而且可以通过在字段上定义索引(这类)方法来优化对这些类型的检索.Postgres的基础类型可以进一步分为内建类型和用户定义类型.内建类型(象 int4)是那些编译进入系统里面去的类型.用户定义类型是那些由用户用后面提到的方法创建的类型.


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

关于 Postgres 系统表
在介绍了扩展性的基本概念后,我们现在看看系统表实际上是个什么布局.你目前可以忽略这章,但是如果没有这一章的信息,后面的一些章节的内容会变得很难懂,所以你最好把这一章打上标记,以备查询.所有系统表都具有以 pg_ 开头的名称.下面的表格包含可能对最终用户有用的信息.(还有许多其他系统表,但是很难得有机会直接对它们进行查询.) 
  
表 37-1. Postgres 系统表 
   
 
 表名称 描述 
pg_database 数据库 
pg_class 表 
pg_attribute 表属性 
pg_index 从索引 
pg_proc 过程 ( C 和 SQL) 
pg_type 类型 (包括基本类型和复合类型) 
pg_operator 操作符 
pg_aggregate 聚集和聚集函数 
pg_am 访问方法 
pg_amop 访问方法操作符 
pg_amproc 访问方法支持函数 
pg_opclass 访问方法操作符表 

图 37-1. 主要的Postgres 系统表 



参考手册给出了关于这些表和它们的字段的更多的详细信息.不过,主要的 Postgres 系统表 显示了系统表的主要成员和它们的字段.(与其他表无关的字段在这里没有显示出来,除非它们是主键的一部分.)这个表看起来或多或少有些难懂,除非你真正看了这些表的内容而且看了它们之间是如何相关的.从现在开始,我们要从这个图里面挖出下面这些东西: 
在后面的几章里,我们将提供一些在系统表上的联合查询--这些查询展示了我们在扩展系统时所需要的信息.仔细研究这张图会让我们对这些联合查询(通常是三或四路联合)更容易理解,因为这样你就能看到在查询里用到的字段是其他表的外部键字.
许多不同的特性(表,属性,函数,类型,访问模式等.)是按照这个结构紧密集成在一起的.因而一个简单的 create 命令就有可能更改许多这些表.
类型和过程是这个图表的核心.

  
注意:我们在这里多多少少把 过程 和 函数 混起来用. 
几乎每个表都包含其他一个或多个表的字段的引用.例如, Postgres 经常使用类型签名(例如,函数或操作符的)来标识其他表的唯一记录. 
有许多字段和关系有明显的含义,但是还有许多(尤其是那些与访问模式打交道的字段)没有(明显含义).表 pg_am,pg_amop,pg_amproc,pg_operator 和 pg_opclass 之间的关系尤其难以理解,所以我们将在讨论完基本扩展后更深入地讨论之(在类型接口和用于索引的操作符章节之后).


--------------------------------------------------------------------------------

Tags:

作者:佚名
分享到: 微信 更多