如果你认为postgresql服务器仅仅是一个存储系统,和它交流的唯一办法就是通过sql语句,那么你就严重了低估了它的特性。这仅仅是这个数据库的特性之一。
postgresql服务器是个强大的架构,它可以用来完成各种各样的数据处理,甚至包括一些非数据服务器的工作。它是一个服务器平台,你可以在这个平台上对各种流行的编程语言开发的函数或库进行简单的组合与匹配。我们来看一下这种复杂的多语言工作顺序:
1)调用以perl编写的字符串解析函数。
2)把字符串转换成xslt,并使用javascript处理转换结果。
3)从外部时间标记服务,比如www.guardtime.com,请求一个安全时间标记,并使用它们提供的c语言版本的sdk。
4)编写python函数,用数字的形式表示结果。
以上流程可以借助几种现成的服务器程序设计语言,通过一系列简单的函数调用来实现。为了完成这样的工作,开发者仅仅需要调用一个postgresql函数,而不必在乎数据在语言和库文件之间是如何传送的,比如:
本书会讨论postgresql服务器程序设计的几个方面。postgresql,如其他更强大的数据库系统一样,拥有所有原生的服务端程序设计特性,如触发器,每当数据变更时,便进行自动化动作调用。同时,postgresql拥有独有的特性,包括重写内嵌行为的强大能力,也包括非常基础的运算符。我们列举这些定制功能。
使用c语言,编写用户定义函数(udf),来完成复杂的计算:
添加复杂的约束条件,确保服务器中的数据满足指导原则。
使用多种语言创建触发器,针对其他表做出相应的变更,记录各种动作,或者如果动作不符合一定的准则,禁止动作发生。
在数据库中定义新的数据类型或运算符。
使用postgis包中定义的地形类型。
针对现存的或者新的数据类型,添加你自己的索引访问方法,来保证更高效的查询操作。
对于这些特性,你又能做什么呢?这里有无限的可能,正如下面列出的这些:
编写数据抽取函数,从结构化数据(如xml或json)中获取最令人感兴趣的部分,而不需要将全部(可能非常大)的文档传送到客户端应用程序。
异步处理事件,比如在不拖慢主程序的情况下发送邮件。你可以为用户信息的改变创建一个邮件序列,这个序列被触发器所控制。每当应用程序进程被通知的时候,独立的邮件发送进程可以使用这些数据。
本章剩下的部分继而对一系列通用数据管理任务进行了详细阐述,展现了这些任务如何通过一个健壮而又优雅的服务器程序设计方法得以解决。
尽管本章对所引用的示例仅作了较为简单的备注,但所有例子均通过测试,可以正常运行。这些例子在这里的主要作用仅是展示服务器程序设计可以完成的各类事情。技术细节会在后续章节中进行进一步解释。