深入浅出PostgreSQL(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-30 15:33:20

点击下载

作者:屠要峰,陈河堆 等

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

深入浅出PostgreSQL

深入浅出PostgreSQL试读:

前言

PostgreSQL近几年来保持着强劲的发展趋势,在DB-Engines数据库流行度排行榜上稳居前几名,呈现较快增长趋势。PostgreSQL 得益于其强大的 SQL 语法功能,在全球得到广泛应用,尤其是欧美等国,在我国也被广泛认可和采用,已经被广泛应用于金融、证券、电信、工业控制、农业现代化、移动互联网、社交媒体等领域。

PostgreSQL版本发布节奏相当快,PostgreSQL中文社区的活跃程度非常高。用户在实际工作中一般会选择稳定的版本,新版本通常要观察一段时间,等待足够稳定之后,才会真正上线使用。据调查,现在商用的主流版本大多还是PostgreSQL 9,相信很快PostgreSQL 10会成为实际工作中的主流版本。

本书的内容源于作者及所在数据库团队多年来的使用经验总结和提炼,也参考和引用了一些其他书籍及技术博客的材料,特别是PostgreSQL中文社区的官方文档,在此表示衷心的感谢!

作者把多年来在数据库研发及技术支持过程中遇到的一些经典案例列举给读者,希望对读者的学习有所帮助。

本书的篇章内容较多,涵盖PostgreSQL数据库的基本功能和高级功能,总体上,把一些比较高级的话题都放到后面几章进行介绍,如性能优化、服务端编程、高可用方案等。每个章节基本上是相对独立完整的,读者可以根据自己的情况跳过前面的基础章节,选读自己感兴趣的章节。

本书的特色

1.以PostgreSQL 10版本为基准,内容较为新颖

PostgreSQL 10版本增加了不少新功能,如声明式表分区等,同时某些原有功能也会发生一些变化,如WAL日志目录名称从“pg_xlog”变成了“pg_wal”。本书的所有实例(示例)都是基于PostgreSQL 10版本的。

2.包含丰富的实例,可操作性强

本书在介绍数据库的SQL语法、数据类型及各种功能时,都同步提供了丰富的实例,以帮助读者更好地理解和掌握这些知识点。全书包含了 100 多个实例,读者可以真正做到“在操作中学习”。

3.书中很多实例来源于真实业务场景,实用性强

本书的很多实例是作者从真实业务场景中提炼出来的,如第15章和第16章中的实例,大多是中兴通讯数据库团队在调优数据库性能过程中遇到过的问题。这些实例实用性很强,可以帮助读者更好地应对相似问题。

4.内容循序渐进,可读性强

本书在结构上采用循序渐进的策略,先从PostgreSQL的起源发展及安装启动开始,接着带领读者熟悉PostgreSQL的基本操作,之后逐步添加新的知识点。对于初学者来说,只要按顺序逐章阅读,即可轻松学会本书的内容,逐步成为PostgreSQL应用的高手。

5.提供了操作的素材

数据库中的很多操作都需要操作环境,例如,要查询数据,需要有一个数据库及数据,否则操作无法进行。所以,本书提供了可操作的素材,如“第6章 查询和修改数据”“第7章 索引”“第8章 视图”“第9章 触发器”“第10章 表继承和表分区”等。

6.注重方法和经验的传递

本书在讲解知识时,更注重方法和经验的传递。全书共有几十个“提示”体例,其内容都是成功经验分享与易错事项总结,有关于经验技巧的,也有关于风险规避的,都可以帮助读者在学习的路途上披荆斩棘,快速进步。

本书适用的读者对象

● 没有任何数据库基础的初学者。

● 有一定数据库基础,想精通PostgreSQL数据库编程的人员。

● 有一定PostgreSQL数据库编程基础,没有项目实践的人员。

● 大中专院校及培训学校的老师和学生。

关于作者

屠要峰

现任中兴通讯数据库专家委员会主任、CCF信息存储委员会委员、中国开源软件联盟理事。他拥有20多年大型项目架构设计及实战经验,主要研究方向为数据库、存储、分布式计算。

他负责中兴通讯数据库平台的研发及推广应用,主持过NoSQL、云存储等多个重要数据库系统的研发。积极参与开源技术社区的建设,推动开源技术的共享互通和稳定发展。

陈河堆

现任中兴通讯数据库平台首席专家,PostgreSQL中文社区核心组成员,拥有10多年数据库研发经验。他曾参与公司高性能内存数据库、分布式数据库和分布式缓存等系统的设计和开发,常年活跃于PostgreSQL、MySQL、Percona、Vitess等开源技术社区,坚持推动PostgreSQL在中国的发展,积极参与PostgreSQL中文社区主办的各种技术交流会。

本书是写作团队共同努力的成果,写作团队成员大部分来自中兴通讯数据库研发团队。下述人员参与了本书相关章节的编写工作,包括王文娟、王涵毅、卞福升、陆晓飞、闫宗帅、徐栋、孔鲁、汪彦舒、韩烨、吴绩敏、屠雪真、丁毅、高洪、郭斌、黄震江、姚莉、(排名不分先后)。此外,要特别感谢李宏玲,她对本书知识内容的校验做出了不可或缺的贡献。

感谢中兴通讯数据库研发团队的所有成员,你们多年的潜心研究和积累是本书的基石。

感谢所有评审本书并对本书提出过建议的朋友,你们的帮助对本书的成稿非常重要。

感谢关心本书的各界朋友,你们的关心与期望是我们全心全意写好本书的动力。

在编写过程中,我们尽己所能将最好的知识讲解呈现给读者,但由于笔者水平有限,难免有疏漏和不妥之处,敬请读者不吝指正。如果读者在学习中遇到困难和疑问,或者有不同建议,可写信至电子邮箱pg@ZTE.com.cn。

屠要峰 陈河堆

2019年9月

读者服务

扫码回复:36901

● 获取本书配套代码

● 获取更多技术专家分享视频与学习资源

● 加入读者交流群,与更多读者互动书评

听说中兴通讯数据库团队正在撰写一本PostgreSQL“理论+实践”的书籍,我很是期待。当他们征求我是否愿意写一篇书评的时候,我更是欣然领命。能为PostgreSQL的推广和开源技术社区的成熟出一份力,我荣幸之至。

本书内容翔实、知识丰富,全面介绍了PostgreSQL 10的各种技术特性和功能特点,既可以让初学者比较全面地了解PostgreSQL,又给愿意深入研究PostgreSQL的人提纲挈领。本书的特色在于使用了大量实例。这种从实践中总结的实例不仅可以帮助读者更好地理解书中所讲述的内容,还可以帮助读者在阅读后应用到实践中,学做结合、知行合一,最大限度地提高学习效率和读书效果。

目前,极数云舟的企业级云原生数据库产品ArkDB已经发布了兼容MySQL 8的版本。我们也在积极探索、努力研发兼容PostgreSQL的ArkDB版本。本书的出版,为PostgreSQL的发展贡献了一部重量级参考文献,也为开发者研发新产品提供了重要的参考资料。

周彦伟

极数云舟创始人兼CEO

中国MySQL用户组主席

中国计算机行业协会开源数据库专业委员会会长

本书根据中兴通讯数据库团队多年的经验,深入介绍了开源数据库PostgreSQL的主要特性,包括并发控制、索引、优化 SQL 语句、优化数据库服务端性能、PL/pgSQL 服务端编程、高可用方案等。本书的知识原理讲解深入浅出,数据库功能介绍简单明了,还通过各种实例练习帮助读者学习PostgreSQL的知识。

董振江

深圳市人工智能行业协会会长

PostgreSQL是一个企业级开源数据库,其在功能、性能、稳定性、可靠性等方面比肩Oracle。中兴通讯、华为、阿里巴巴、腾讯、苏宁等众多大型企业已成功将PostgreSQL应用于企业业务系统。本书从各个方面对PostgreSQL进行了阐述,无论对于初学者还是专业人士来说,本书都具有很高的参考价值。

张浩军

航天中认软件测评科技(北京)有限责任公司CTO

本书深入浅出、循序渐进地介绍了PostgreSQL 10的基本概念、关键特性和高级功能,知识系统、全面,重点突出,既有严谨的理论讲解,又有大量实操案例的分享,是数据库领域不可多得的佳作。

闫林

中兴通讯IT技术学院副院长

这是一本PostgreSQL的实战书籍,可以帮助读者快速上手并掌握使用PostgreSQL数据库的基本技能,同时也对数据库优化、高可用集群等高阶话题进行了详细介绍。本书能够帮助读者快速成为一名合格的PostgreSQL管理者,值得PostgreSQL初学者及高级用户阅读。

彭煜玮

武汉大学计算机学院副教授《PostgreSQL数据库内核分析》作者第1篇 准备第1章 初识PostgreSQL

PostgreSQL 是一个对象关系型数据库管理系统,其代码完全开源。用户可以对其进行二次开发,并根据需要以开源或闭源的形式发布。

PostgreSQL 的功能非常强大,深受数据库开发者和使用者喜爱。PostgreSQL 于 2017 年、2018年连续两年被DB-Engines评选为“年度数据库”。1.1 PostgreSQL的起源

PostgreSQL的前身可以追溯到1970年的Ingres项目。Ingres是加州大学伯克利分校(简称“伯克利”)的一个关系型数据库研究项目,它开始于1970年,结束于1985年,由著名科学家Michael Stonebraker和Eugene Wong研究。提示:

Ingres充满了传奇色彩,很多商业数据库产品(Sybase、Informix、Microsoft SQL Server、NonStop SQL等)都源自该项目产生的Ingres关系型数据库代码。

在20世纪80年代早期,Ingres与Oracle展开了“肉搏战”,两者都被认为是当时最领先的、与硬件无关的关系型数据库。由于Ingres不支持SQL语言,自1985年以后逐渐丧失了市场份额。

PostgreSQL是从Ingres项目演化而来的。1982年,Ingres项目团队负责人Michael Stonebraker离开了伯克利大学去创业,将Ingres商业化。1985年,Michael Stonebraker重返伯克利大学,启动了一个被称为“post-Ingres”的项目(后 Ingres 项目),致力于解决当时的数据库系统问题。PostgreSQL的早期名称为Postgres,它来源于post-Ingres项目的名称。Postgres技术使得Michael Stonebraker于2014年获得了图灵奖。

Postgres的目标是添加最少的特性用于支持类型定义和描述关系,可以使用规则从相关的数据表中检索信息。

从1986年开始,Postgres团队发表了若干篇论文,用于阐述该系统的基础原理。

1987年,Postgres团队开发了原型系统版本,并在1988年 ACM SIGMOD会议上进行了展示。

1989年6月,Postgres团队向少数用户发布了1.0版本,之后又发布了2.0版本和3.0版本。

1994年,Postgres团队发布了4.0版本。

1994 年,Andrew Yu 和 Jolly Chen 将 SQL 语言解释器添加到 Postgres 中,并更名为“Postgres 95”。

1995年5月5日,Andrew Yu和Jolly Chen发布了Postgres的第1个测试版。

1996年,“Postgres 95”被更名为“PostgreSQL”,随后,Bruce Momjian和 Vadim B.Mikheev在Postgres 95版本基础上进行修改,并在1997年1月29日发布了首个基于开源社区的PostgreSQL 6.0 版本。从此以后,来自世界各地的开发者和志愿者组成 PostgreSQL 全球开发组(The PostgreSQL Global Development Group),共同维护PostgreSQL软件代码。

目前,PostgreSQL已经更新到了12.1版本。1.2 PostgreSQL简介

PostgreSQL是一个功能强大且开源的对象关系型数据库管理系统,它使用SQL语言扩展了许多语法特性,以支持更复杂的数据负载。

PostgreSQL 可以在大多数操作系统上运行。自 2001 年起,PostgreSQL 就已经兼容事务的ACID属性,并拥有一系列强大的插件,如空间数据库扩展插件PostGIS,外部数据表访问插件postgres_fdw、oracle_fdw等。

1.2.1 基本概念

PostgreSQL 中的很多概念来源于关系代数。为了使读者更好地理解本书后续内容,有必要了解以下基本概念。

1.关系(Relation)“关系”是一个表示表(Table)的数学术语。在PostgreSQL中,“关系”表示表或索引。其他数据库一般称表为Table,称索引为Index,而PostgreSQL有时会将它们统称为关系。表用来存储数据,一个表通常由若干行组成。

2.元组(Tuple)和域(Field)

元组(Tuple)表示表中的行(Row),有的数据库将元组称为记录(Record)。一个元组一般由多个域(Field)组成,域有时也被称为字段(Field)或列(Column)。

每个字段都有一个特定的数据类型和可选属性。字段在元组中的位置次序是固定不变的,而行在表中的位置次序则是不固定的(事实上每次数据更新之后行的物理位置都会发生变化)。

3.数据库(Database)和数据库簇(Database Cluster)

多个表组合在一起构成了一个数据库,这是一个逻辑意义上的数据库。一般来说,这些表在业务层面上存在着某种逻辑关系。

在一个单一的PostgreSQL服务器实例中,所有的数据库集合在一起构成了一个数据库簇。提示:

读者一定要正确理解“数据库簇”的概念,不要将它误解为一个分布式数据库实例的集合。

为了便于管理,我们可以将同一个数据库中的对象(表、数据类型、函数、运算符等)划分成不同的逻辑组合,每一个逻辑组合被称为“模式”(具体内容参见第11章有关模式的相关内容)。

4.表空间(Tablespace)

表空间是一个存储位置,可以在其中保存底层数据库对象的实际数据。在PostgreSQL中,表空间允许数据库管理员定义一个文件系统位置,代表数据库对象(表、索引等)的文件可以存储在该文件目录下。

5.数据段(Segment)和数据页(Page)

每个表和索引都保存在一个单独的文件中,每个文件就是一个数据段(Segment)。

在默认情况下,当一个表或索引的大小超过1GB时,它会被拆分出另一个数据段。第1个数据段以PostgreSQL内部定义的filenode命名,第2个数据段则命名为filenode.1,以此类推。

一个数据段内部是以数据页的形式来组织的,数据页表示硬盘中的数据块,默认大小为8KB,最大为32KB,数据页的大小是在编译时确定的。行就存储在数据页中,由于每个数据页是等价的,因此一个特定的行可以存储在任意一个数据页中。

1.2.2 存储体系结构

1.2.1节介绍了PostgreSQL的几个基本概念,对数据库对象有了初步的认识,那么它们之间的关系是什么呢?下面了解一下它们的逻辑存储结构,如图1-1所示。

如图1-1所示,一个Database Cluster包含多个Database,在一个Database下可以创建多个Table,在Database与Table之间根据需要可以引入一层逻辑实体Schema。每个Table包含了多条Record,而每条Record由多个Field构成。上述不同粒度的逻辑实体是一个逐级包含的关系,这是一种典型的关系型数据库数据模型。

这些逻辑实体需要被保存到物理磁盘中才能实现持久化存储,实际上,PostgreSQL 通过表空间和数据文件的方式实现逻辑实体到物理存储的转化。图1-1 PostgreSQL的逻辑存储结构

表空间对应文件系统中的一棵目录树,每个数据库在表空间目录下有一个对应的子目录(以数据库的OID命名),每个表和索引都可以创建单独的数据文件,它们以表或索引的filenode命名,filenode可以在系统表pg_class中查询到。表还可以创建其他辅助数据文件,如图1-2中以_fsm和_vm为后缀的文件。图1-2展示了默认表空间$PGDATA/base的目录结构示意图。图1-2 $PGDATA/base的目录结构示意图

表和索引的数据文件大小默认为 1GB,当超过该阈值时系统会创建一个新的数据文件,并加上从“.1”开始的后缀名,这样的数据文件又被称为数据段。

1.2.3 进程体系架构

在开始使用PostgreSQL之前,有必要先理解它的体系架构。简单地说,PostgreSQL也采用了客户/服务器(Client/Server)模型,如图1-3所示。

1.客户端

客户端(也称为“前端”)可以是多种形式,如基于文本的工具、图形化工具、基于数据库访问 API 的应用程序、数据库后台维护程序等。客户端通过TCP/IP网络连接到服务器端的进程,进行通信交互,实现对数据库的各种操作。图1-3 PostgreSQL进程体系架构

2.服务器端

服务器端(也称为“后端”)包含一组进程,它们负责管理数据库文件、接受来自客户端的连接请求、为客户端执行各种数据库操作等。

PostgreSQL采用了多进程架构,其主进程叫作Postmaster(其程序名叫作postgres)。当接受新的客户端连接请求之后,Postmaster会创建一个新的postgres服务进程,并让该服务进程专门服务新的客户端连接,直到该连接关闭为止。

除 postgres 服务进程外,Postmaster 在启动过程中还会启动一组后台管理维护进程,包括bgWriter、WAL Writer、Checkpointer、Auto Vacuum等进程,实现刷写脏页、记录WAL日志、空间回收等功能。1.3 PostgreSQL 10版本的新特性

2017年10月5日,PostgreSQL全球开发小组(PostgreSQL Global Development Group)宣布PostgreSQL 10版本正式发布。下面简要介绍PostgreSQL 10版本的主要新增特性。

1.逻辑复制:用于分发数据的订阅/发布框架

逻辑复制扩展了PostgreSQL 10之前版本的复制特性,能够将用户修改的数据库和数据表发送到不同的PostgreSQL数据库。现在,用户可以对复制到各种数据库集群的数据进行微调。

2.声明式表分区:便于用户划分数据

PostgreSQL 10引入了“表分区”语法,使用户可以轻松地创建和维护范围与列表分区表。添加分区语法是一系列已规划特性中的第一步,这些特性将在PostgreSQL 10中提供一个强大的分区框架。

3.提高查询并行性:攻克用户的分析难题

PostgreSQL 10为并行化查询提供了更好的支持,允许查询执行过程的更多部分进行并行处理,改进并行化数据扫描类型,以及重新组合数据时的优化,如预排序。这些增强功能使得查询结果能够更快返回。

4.同步复制的法定副本数提交:有信心地分发数据

PostgreSQL 10引入了同步复制的法定副本数提交(Quorum Commit)机制,它在主数据库如何接收确认消息方面有了更多的灵活性,即确认变更已经成功写入远程副本。现在,如果任意数量的副本已经确认对数据库进行了更改,则认为数据已经安全写入数据库。

5.SCRAM-SHA-256身份验证:保障数据访问安全

RFC 5802协议定义了SCRAM(Salted Challenge Response Authentication Mechanism),通过提供一个强密码协商框架来提高密码的安全存储和传输。

PostgreSQL 10引入了RFC 7677协议定义的SCRAM-SHA-256身份验证方法,提供了比现有的基于MD5的密码验证方法更好的安全性。提示:

RFC 7677协议的全称为“SCRAM-SHA-256 and SCRAM-SHA-256-PLUS Simple Authentication and Security Layer (SASL)Mechanisms”,该协议记录了SCRAM-SHA-256和SCRAM-SHA-256-PLUS,提供了原始SCRAM-SHA-1-PLUS机制的安全实现指导,并更新了RFC 5802协议的SCRAM 注册过程。1.4 小结

建议读者平时多关注开源社区官方网站,了解PostgreSQL的最新技术及应用动态。

● PostgreSQL开源社区官方网址为https://www.postgresql.org。

● PostgreSQL中文社区官方网址为https://www.postgres.cn。第2章 安装和启动PostgreSQL

本章主要介绍了安装 PostgreSQL、初始化数据库、数据库的基本配置,以及启动、停止数据库,查看数据库状态。2.1 安装PostgreSQL

2.1.1 在Windows中安装PostgreSQL

1.下载PostgreSQL(1)登录PostgreSQL的官方网址“https://www.postgresql.org”,单击“Download”按钮进入下载页面,如图2-1所示。图2-1 PostgreSQL的官方网址(2)单击“Windows”,选择Windows操作系统平台,如图2-2所示。(3)单击“Download the installer”,如图2-3所示。图2-2 选择Windows操作系统平台图2-3 单击“Download the installer”(4)进入PostgreSQL的安装版本和操作系统选择页面,选择合适的版本和操作系统位数,如PostgreSQL 10.5和Windows x86-64,单击“DOWNLOAD NOW”按钮开始下载安装包,如图2-4所示。图2-4 选择PostgreSQL的安装版本和操作系统版本

2.安装 PostgreSQL(1)双击下载的PostgreSQL 10.5安装包,打开PostgreSQL的安装窗口,单击“Next”按钮,如图2-5所示。(2)在“Installation Directory”窗口中选择安装路径(也可以采用默认的安装路径),单击“Next”按钮,如图2-6所示。图2-5 打开PostgreSQL的安装窗口图2-6 选择安装路径(3)在“Select Components”窗口中选择安装组件(也可以采用默认的安装配置),单击“Next”按钮,如图2-7所示。(4)在“Data Directory”窗口中选择数据路径(也可以采用默认的安装配置),单击“Next”按钮,如图2-8所示。图2-7 选择安装组件图2-8 选择数据路径(5)在“Password”窗口中设置数据库超级用户(postgres)的密码,单击“Next”按钮,如图2-9所示。(6)在“Port”窗口中设置数据库监听端口(也可以采用默认的安装配置),单击“Next”按钮,如图2-10所示。图2-9 设置数据库超级用户的密码图2-10 设置数据库监听端口(7)在“Advanced Options”窗口中设置数据库的语言环境(也可以采用默认的安装配置),单击“Next”按钮,如图2-11所示。(8)在“Pre Installation Summary”窗口中显示了前面所选择的所有安装配置,单击“Next”按钮,如图2-12所示。图2-11 设置数据库的语言环境图2-12 显示所有的安装配置(9)弹出“Ready to Install”窗口,单击“Next”按钮,如图2-13所示。(10)在“Installing”窗口中实时显示安装进度,如图2-14所示。图2-13 “Ready to Install”窗口图2-14 实时显示安装进度(11)弹出“Completing the PostgreSQL Setup Wizard”窗口,单击“Finish”按钮完成安装。(12)用命令行方式进入安装文件路径下,执行“psql-U postgres”即可登录数据库,如图2-15所示。图2-15 登录数据库

2.1.2 在Linux中安装PostgreSQL

1.在RedHat、CentOS或Fedora中安装PostgreSQL

RedHat、CentOS或Fedora的全量镜像已经包含PostgreSQL的软件包,具体版本如表2-1所示。表2-1 Linux自带PostgreSQL版本信息

可以直接使用yum工具安装PostgreSQL,具体步骤如下。(1)执行“yum install postgresql-server.x86_64”命令,代码如下:(2)提示是否安装依赖包,输入“y”,代码如下:(3)如果输出“Complete”,则表示安装成功完成。

在RedHat中安装完PostgreSQL后,默认并没有启动PostgreSQL。下面介绍启动PostgreSQL的方法。(1)在首次启动PostgreSQL前,需要进行数据的初始化操作。数据路径默认初始化在“/var/lib/pgsql/data”路径下,代码如下:

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载