欢迎光临
免费的PDF电子书下载网站

PostgreSQL服务器编程(资深PostgreSQL专家撰写,系统讲解PostgreSQL服务器编程的各种技术细节,深入解析PostgreSQL的扩展框架) PDF下载

编辑推荐

  (1)资深PostgreSQL专家撰写,系统讲解PostgreSQL服务器编程的各种技术细节,深入解析PostgreSQL的扩展框架,Amazon全五星评价
  (2)通过丰富的实例,循序渐进阐释PostgreSQL开发和扩展的相关概念和各种实用技术,包含大量实用技巧和窍门,为快速掌握PostgreSQL服务器编程提供系统实践指南

 ;

内容简介

  本书将带你学习PostgreSQL函数的基础部分。在学习过程中,你将会使用各种程序语言(不限于自带的PL/pgSQL语言)进行函数的编写。你会看到我们是如何创建可用的库文件,如何将这些库文件组装成更有用的组件,并把这些组件分发到社区中;你也会看到我们是如何从大量的外部数据源中抽取数据,并通过扩展PostgreSQL完成数据的本地化抽取;同时,你也可以在以上过程中使用一个超级棒的调试界面,这个调试界面可以让你在整个学习过程中变得更加得心应手、事半功倍。

作者简介

  Hannu Kosing Skype公司第一位数据库管理员与数据库架构师。2006年离开Skype之后,他成为2ndQuadrant公司的首席PostgreSQL咨询顾问,足迹遍布全球各地。Hannu自1995年开始使用PostgreSQL,有近20年的PostgreSQL实战经验。
  Jim Mlodgenski OpenSCG公司CTO,OpenSCG是一家专注于开源技术的专业服务公司。他还曾是StormDB的CEO,StormDB是一家致力于水平扩展的云数据库公司。在加入StormDB之前,Jim是Cirrus Technology、EnterpriseDB和Fusion Technology等公司的资深研发工程师。Jim非常拥护PostgreSQL,他是美国PostgreSQL协会的董事会成员,同时也是纽约PostgreSQL用户组和费城PostgreSQL用户组的重要成员。
  Kirk Roybal 从1998年开始就活跃于PostgreSQL社区。他帮助建立了休斯敦、达拉斯、伯明顿等地区的PostgreSQL用户组。他在报告系统、商业智能、数据仓库、应用程序开发等领域均提供了优秀的PostgreSQL解决方案。
  译者简介
  戚长松 拥有浙江大学机械工程硕士学位,专注于企业数据库开发与基于数据库的应用程序设计,拥有近10年的数据库开发经验及5年的PostgreSQL实战经验,擅长基于PostgreSQL平台进行数据仓库建模与数据挖掘。

PostgreSQL服务器编程(资深PostgreSQL专家撰写,系统讲解PostgreSQL服务器编程的各种技术细节,深入解析PostgreSQL的扩展框架) PDF下载

目录

前言
第1章  ;PostgresQL服务器简介
 ; 1.1  ;为什么在服务器中进行程序设计
 ; 1.2  ;关于本书的代码示例
 ; 1.3  ;超越简单函数
 ; 1.4  ;使用触发器管理相关数据
 ; 1.5  ;审核更改
 ; 1.6  ;数据清洗
 ; 1.7  ;定制排序方法
 ; 1.8  ;程序设计最佳实践
 ;  ; 1.8.1  ;KISS——尽量简单(keep it simple stupid)
 ;  ; 1.8.2  ;DRY——不要写重复的代码(don repeat yourself)
 ;  ; 1.8.3  ;YAGNI——你并不需要它(you ain gonnaneedit)
 ;  ; 1.8.4  ;SOA——服务导向架构(service-oriented architecture)
 ;  ; 1.8.5  ;类型的扩展
 ; 1.9  ;关于缓存
 ; 1.10  ;总结——为什么在服务器中进行程序设计
 ;  ; 1.10.1  ;性能
 ;  ; 1.10.2  ;易于维护
 ;  ; 1.10.3  ;保证安全的简单方法
 ; 1.11  ;小结
第2章  ;服务器程序设计环境
 ; 2.1  ;购置成本
 ; 2.2  ;开发者的可用性
 ; 2.3  ;许可证书
 ; 2.4  ;可预测性
 ; 2.5  ;社区
 ; 2.6  ;过程化语言
 ;  ; 2.6.1  ;平台兼容性
 ;  ; 2.6.2  ;应用程序设计
 ;  ; 2.6.3  ;更多基础
 ; 2.7  ;小结
第3章  ;第一个PL/pgsQL函数
 ; 3.1  ;为什么是PL/pgSQL
 ; 3.2  ;PL/pgSQL函数的结构
……
第4章  ;返回结构化数据
第5章  ;PL/pgsQL触发器函数
第6章  ;PL/pgsQL调试
第7章  ;使用无限制的开发语言
第8章  ;使用C编写高级函数
第9章  ;使用PL/Proxy扩展数据库
第10章  ;发布自己的PostgreSQL扩展程序

免费在线读

  第1章
  PostgreSQL服务器简介
  如果你认为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)中获取最令人感兴趣的部分,而不需要将全部(可能非常大)的文档传送到客户端应用程序。
  异步处理事件,比如在不拖慢主程序的情况下发送邮件。你可以为用户信息的改变创建一个邮件序列,这个序列被触发器所控制。每当应用程序进程被通知的时候,独立的邮件发送进程可以使用这些数据。
  本章剩下的部分继而对一系列通用数据管理任务进行了详细阐述,展现了这些任务如何通过一个健壮而又优雅的服务器程序设计方法得以解决。
  尽管本章对所引用的示例仅作了较为简单的备注,但所有例子均通过测试,可以正常运行。这些例子在这里的主要作用仅是展示服务器程序设计可以完成的各类事情。技术细节会在后续章节中进行进一步解释。
  1.1 为什么在服务器中进行程序设计
  开发者使用各种不同的语言进行程序开发,并且希望所编写的代码能够在任何环境下运行。当编写应用程序的时候,一些程序员会坚守这样的信条:他们认为服务端应用程序里面的处理逻辑应尽可能多地被推送到客户端。因此,我们经常能见到这样一种情况,即越来越多的应用程序会在浏览器中使用JavaScript。还有的情况则是把处理逻辑放置在中间层,然后通过应用程序服务器来处理业务规则。这些实际上都是设计应用程序的各种有效方式,那么为什么还要在数据库服务器中进行程序设计呢?
  让我们从一个简单的例子开始。许多应用程序会涉及一张客户列表,这些客户的账户中有账户余额。我们将使用这个示例模式和数据:
  当我们使用数据库时,最常用的方式就是使用SQL查询和数据库进行交互。如果你想从Bob的账户转移14美元到Mary的账户,你可以通过简单的SQL语句实现:
  但是,你要确保Bob的账户有足够的余额(或存款)。这样的确认非常重要,因为一旦出现任何事件节点的失败,就会导致事务不被触发。因此,考虑到这一点,在应用程序开发中,以上的代码片段就会变成这样:
  但是玛丽一定有账户吗?即便她没有账户,最后的UPDATE语句仍然会成功,但是却更新了0行记录。如果核对出现失败状况,那么你应该做ROLLBACK,而不是COMMIT。一旦你按照这样的流程,对所有客户端完成了转账的任务,新的需求又会出现。也许这次需求是要求把最小的可转移金额限制为5美元,这时候你就需要再次检查所有客户端中的所有代码。
  所以你是否可以做些什么,使得所有这些工作更加容易管理、更加安全和更加强健?这就是服务器程序设计可以做到的事情,它可以在自动在数据库服务器上执行代码。你可以把计算、核对和数据操作全部转移到一个位于服务器上的用户定义函数里面(UDF)。这样做不仅仅保证了你只需要管理一份操作逻辑,同时也使得工作更加快捷,因为此时你不再需要在服务器与客户端之间来回穿梭。如果需要的话,你甚至只需要确保仅仅是那些必需的信息被传送到数据库之外。比如,对于大多数客户端应用程序而言,它们并不需要知道Bob账户上究竟有多少余额。大多数情况下,这些客户端应用程序仅仅需要知道账户上是否有足够的余额可用于转账,或者更简明扼要一点,它们只需要了解这次交易是否可以成功,仅此信息足矣。
  使用PL/pgSQL进行完整性检查
  PostgreSQL有它自己的开发语言,叫做PL/pgSQL。PL/pgSQL的主要目的就是轻松地与SQL语句集成在一起。PL是programming language的简称,意思是程序设计语言。PL仅仅是诸多可用于服务器开发语言中的一种。而pgSQL则是PostgreSQL的缩写。
  与基础SQL不同,PL/pgSQL包括了程序化的元素,比如在PL/pgSQL中可以使用if /then/else语句和循环功能。你可以轻松地执行SQL语句,甚至对SQL语句的结果进行循环操作。
  应用程序中所需要进行的完整性检查可以通过PL/pgSQL函数来完成。这种函数包括了3个参数:付费人的名字、收款人的名字和付费金额。这个例子同时返回这次付费的
  状态:
  假设你在之前并未使用过先前建议的UPDATE语句,这里提供使用这个函数的一些
  例子:
  该应用程序应该检查返回码,并且决定如何处理这些错误。只要程序设定了拒绝任何意外值,你就可以通过扩展这个函数,去做更多的检查工作,比如最小可转账金额,并确保这个可以避免执行。这里有3个可能会返回的错误:
  为了使这些检查始终有效,你需要让所有的转账操作通过函数来执行,而不是手动使用SQL语句来改变这些值。
  1.2 关于本书的代码示例
  这里输出显示的示例都是使用PostgreSQL的psql工具创建的,psql工具通常是在Linux系统上运行的。如果你使用一个GUI工具(比如pgAdmin3)去访问服务器,绝大多数的代码同样是生效的。当你看见以下的代码行时:
  postgres=#部分是psql命令显示的提示。
  本书中的例子已经在PostgreSQL 9.2中测试通过,它们应该可以在PostgreSQL 8.3或更高版本中运行。相比PostgreSQL最近几个版本上的服务器程序设计,其实并没有发生多少根本性的改变。但PostgreSQL语法变得越来越严谨了,从而降低了服务器开发代码中错误的概率。鉴于这些改变本身,新版本上的大多数代码依然可以在老版本上运行,除非代码中使用了非常新的特性。然而,由于最近强化的一些限制,老版本的代码很容易出现运行失败的状况。
  切换到扩展显示
  当使用psql工具执行查询的时候,PostgreSQL通常使用竖直对齐的列的形式,输出结果:
  当你看到一个输出时,你可以辨别出它是否属于一个规则的输出,因为这个输出会以行数显示结束。
  这类输出较难融入到像本书这样的文本中。而通过调用扩展显示,输出结果便可以轻松显示出来。这种方式将每一列拆分到隔离的行中。你可以通过-x命令行或者发送x到psql程序来切换到扩展显示模式。下面是两种方法的例子:
  请注意,扩展输出并没有显示行数,而是统计了每个输出的行数。为了节省空间,本书中并不是所有例子都会显示扩展输出。如果你看到rows或RECORD,便可识别你看到的是哪种类型。在一般情况下,这种扩展模式是比较受欢迎的,只是查询的输出太长,超出的本书的版面宽度。
  1.3 超越简单函数
  服务器程序设计可以被看做几个不同的事情。服务器程序设计不仅仅是编写服务端函数。在服务器上你可以处理许多其他的事情,而这些事情都能被当作是程序设计。
  使用运算符完成数据比较
  对于更多复杂的任务,你可以定义自己的类型、操作符,并且可以从一种类型转换到另外一种类型,这种转换可以让你完成苹果与橘子的价值对比。
  如下例所示,你可以定义类型fruit_qty来表示水果的数量,并且告诉PostgreSQL可以用来比较苹果与橘子的价值,比如假设一个橘子等于1.5个苹果的价值,然后把苹果转换为橘子:
  ……

PostgreSQL服务器编程(资深PostgreSQL专家撰写,系统讲解PostgreSQL服务器编程的各种技术细节,深入解析PostgreSQL的扩展框架) pdf下载声明

本pdf资料下载仅供个人学习和研究使用,不能用于商业用途,请在下载后24小时内删除。如果喜欢,请购买正版

pdf下载地址

版权归出版社和作者所有,下载链接已删除。如果喜欢,请购买正版!

链接地址:PostgreSQL服务器编程(资深PostgreSQL专家撰写,系统讲解PostgreSQL服务器编程的各种技术细节,深入解析PostgreSQL的扩展框架)