定 價:89 元
叢書名:數(shù)據(jù)庫技術(shù)叢書
- 作者:譚峰 張文升
- 出版時間:2018/7/1
- ISBN:9787111603467
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:TP311.138SQ
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書由數(shù)據(jù)庫專業(yè)開發(fā)人員撰寫,系統(tǒng)介紹PostgreSQL10的豐富特性,及其在生產(chǎn)實踐運維中的技巧,全書分為基礎(chǔ)篇、核心篇、進階篇,共18章;A(chǔ)篇包括第1~4章,主要介紹PostgreSQL基礎(chǔ)知識,例如安裝與配置、客戶端工具、數(shù)據(jù)類型、SQL高級特性等,為讀者閱讀核心篇和進階篇做好準備;核心篇包括第5-9章,主要介紹PostgreSQL核心內(nèi)容,例如體系結(jié)構(gòu)、并行查詢、事務與并發(fā)控制、分區(qū)表等;進階篇包括第10~18章,主要介紹PostgreSQL高級內(nèi)容,例如性能優(yōu)化、物理復制、邏輯復制、備份與恢復、高可用、版本升級、擴展模塊、Oracle數(shù)據(jù)庫遷移PostgreSQL實戰(zhàn)、PostGIS等。
這是一本值得存放于身旁的PostgreSQL參考書,特別是性能分析、集群、分片、地理信息等高技術(shù)含量的章節(jié),可以作為日常工作的有效參考。本書基于新的PostgreSQL 10版本,重點在于通過實際操作為讀者全方位解讀PostgreSQL。從安裝配置、連接使用、數(shù)據(jù)管理、體系架構(gòu),到NoSQL操作、性能優(yōu)化、集群部署、分布式、分片、地理信息,面面俱到。
Preface 前 言PostgreSQL擁有近三十年的歷史,是目前最先進的開源數(shù)據(jù)庫,PostgreSQL具備豐富的企業(yè)級特性,盡管在歐美、日本使用非常廣泛,但在國內(nèi)并沒有得到廣泛使用,產(chǎn)生這種情形的原因是多樣的,其中與PostgreSQL中文資料匱乏有較大關(guān)系,目前市場上PostgreSQL中文書籍非常少。
筆者從2010年開始從事PostgreSQL DBA工作,在PostgreSQL數(shù)據(jù)庫運維工程中積累了一些經(jīng)驗,因此想系統(tǒng)編寫一本PostgreSQL書籍,一方面總結(jié)自己在PostgreSQL數(shù)據(jù)庫運維方面的經(jīng)驗,另一方面希望對PostgreSQL從業(yè)者有所幫助,同時希望給PostgreSQL在國內(nèi)的發(fā)展貢獻一份力量;本書的另一位作者張文升擁有豐富的PostgreSQL運維經(jīng)驗,目前就職于探探科技任首席PostgreSQL DBA,他的加入極大地豐富了此書的內(nèi)容。
近幾年P(guān)ostgreSQL在國內(nèi)得到較快的發(fā)展,平安科技、去哪兒網(wǎng)、探探科技、斯凱網(wǎng)絡等公司都在逐步使用PostgreSQL,目前阿里云、騰訊云、華為云等主流云服務提供商也提供了基于PostgreSQL數(shù)據(jù)庫的云服務,相信PostgreSQL在國內(nèi)將有更廣闊的發(fā)展。
本書主要內(nèi)容本書系統(tǒng)介紹PostgreSQL的豐富特性,以及生產(chǎn)實踐運維中的技巧,全書分為基礎(chǔ)篇、核心篇、進階篇;A(chǔ)篇包括第1~4章,主要介紹PostgreSQL基礎(chǔ)知識,例如安裝與配置、客戶端工具、數(shù)據(jù)類型、SQL高級特性等,為讀者閱讀核心篇和進階篇做好準備;核心篇包括第5~9章,主要介紹PostgreSQL核心內(nèi)容,例如體系結(jié)構(gòu)、并行查詢、事務與并發(fā)控制、分區(qū)表等;進階篇包括第10~18章,主要介紹PostgreSQL進階內(nèi)容,相比前兩篇進階篇的難度有一定程度增加,例如性能優(yōu)化、物理復制、邏輯復制、備份與恢復、高可用、版本升級、擴展模塊、Oracle數(shù)據(jù)庫遷移PostgreSQL實戰(zhàn)、PostGIS等。本書18章主要內(nèi)容如下。
第1章:介紹PostgreSQL起源、安裝、數(shù)據(jù)庫實例創(chuàng)建、數(shù)據(jù)庫配置、數(shù)據(jù)庫的啟動和停止等。
第2章:介紹psql命令行客戶端工具的使用和特性,例如psql元命令、psql導入導出數(shù)據(jù)、使用psql執(zhí)行腳本、psql的亮點功能等。
第3章:介紹PostgreSQL各種數(shù)據(jù)類型,包括字符類型、時間/日期類型、布爾類型、網(wǎng)絡地址類型、數(shù)組類型、范圍類型、json/jsonb類型等;同時介紹了數(shù)據(jù)類型相關(guān)函數(shù)、操作符、數(shù)據(jù)類型轉(zhuǎn)換。
第4章:主要介紹PostgreSQL支持的一些高級SQL特性,例如WITH查詢、批量插入、RETURNING返回DML修改的數(shù)據(jù)、UPSERT、數(shù)據(jù)抽樣、聚合函數(shù)、窗口函數(shù)等。
第5章:簡單介紹PostgreSQL的邏輯結(jié)構(gòu)和物理結(jié)構(gòu),以及PostgreSQL的守護進程、服務進程和輔助進程。
第6章:介紹PostgreSQL并行查詢相關(guān)配置與應用,以及多表關(guān)聯(lián)中并行的使用。
第7章:介紹事務的基本概念、性質(zhì)和事務隔離級別,以及PostgreSQL多版本并發(fā)控制的原理和機制。
第8章:介紹傳統(tǒng)分區(qū)表和內(nèi)置分區(qū)表的部署、分區(qū)維護和性能測試。
第9章:介紹PostgreSQL的NoSQL特性,以及PostgreSQL全文檢索。
第10章:簡單介紹了服務器硬件、操作系統(tǒng)配置對性能的影響,介紹了一些常用的Linux性能監(jiān)控工具,并著重介紹了對性能影響較大的幾個方面,以及性能優(yōu)化方案。
第11章:著重介紹PostgreSQL內(nèi)置的測試工具pgbench,以及如何使用pgbench的內(nèi)置腳本和自定義腳本進行基準測試。
第12章:主要介紹PostgreSQL物理復制和邏輯復制,并結(jié)合筆者在數(shù)據(jù)庫維護過程中的實踐經(jīng)驗分享了三個典型的流復制維護生產(chǎn)案例。
第13章:重點介紹PostgreSQL物理備份、增量備份,同時演示了數(shù)據(jù)庫恢復的幾種場景。
第14章:介紹兩種高可用方案,一種是基于Pgpool-II和異步流復制的高可用方案,另一種是基于Keepalived和異步流復制的高可用方案。
第15章:介紹PostgreSQL版本命名規(guī)則、支撐策略、歷史版本演進,介紹了小版本升級,最后重點介紹了大版本升級的三種方式。
第16章:主要介紹一些常見的外部擴展,例如file_fdw、pg_stat_statements、auto_explain、postgres_fdw,并重點介紹Citus外部擴展。
第17章:從實際案例出發(fā),分享了一個Oracle數(shù)據(jù)庫遷移到PostgreSQL數(shù)據(jù)庫的實際項目。
第18章:簡單介紹PostGIS部署、幾何對象的輸入、輸出、存儲、運算,最后介紹了PostGIS的一個典型應用場景:圈人與地理圍欄。
本書特點本書不是PostgreSQL入門書籍,不會介紹PostgreSQL每個基礎(chǔ)知識點,本書從PostgreSQL生產(chǎn)實踐運維出發(fā),對PostgreSQL重點內(nèi)容進行詳細講解并給出演示示例,是一本PostgreSQL數(shù)據(jù)庫運維實戰(zhàn)書籍。
本書基于PostgreSQL 10編寫,書中涵蓋了大量PostgreSQL 10重量級新特性,例如內(nèi)置分區(qū)表、邏輯復制、并行查詢增強、同步復制優(yōu)選提交等,通過閱讀此書,讀者能夠?qū)W習到PostgreSQL 10重量級新特性。
本書共18章,如果你對PostgreSQL有一定的運維經(jīng)驗,完全可以不按章節(jié)順序,而是選擇比較關(guān)注的章節(jié)進行閱讀。如果你完全沒有PostgreSQL數(shù)據(jù)庫基礎(chǔ),建議先通過其他資料大致掌握PostgreSQL基礎(chǔ)知識,再來閱讀本書,相信你在此書的閱讀過程中能有收獲。
讀者對象本書適合有一定
譚峰 網(wǎng)名francs,中國開源軟件推進聯(lián)盟PostgreSQL分會特聘專家,《PostgreSQL 9 Administration Cookbook》譯者之一,《PostgreSQL High Performance Cookbook》英文版技術(shù)審校者之一,曾在杭州斯凱網(wǎng)絡科技有限公司從事PostgreSQL DBA一職六年。熱忠于博客分享PostgreSQL經(jīng)驗,分享技術(shù)博客500余篇,F(xiàn)就職于浙江移動負責應用上云架構(gòu)管控、資源分配以及私有云建設(shè)工作。
張文升 中國開源軟件推進聯(lián)盟PostgreSQL分會核心成員之一。常年活躍于PostgreSQL、MySQL、Redis等開源技術(shù)社區(qū),堅持推動PostgreSQL在中國地區(qū)的發(fā)展,多次參與組織PostgreSQL全國用戶大會。近年來致力于推動PostgreSQL在互聯(lián)網(wǎng)企業(yè)的應用以及企業(yè)PostgreSQL培訓與技術(shù)支持。
Contents 目錄
序言
前言
基 礎(chǔ) 篇
第1章 安裝與配置基礎(chǔ)2
1.1 初識PostgreSQL2
1.1.1 PostgreSQL的特點3
1.1.2 許可3
1.1.3 郵件列表和討論區(qū)3
1.2 安裝PostgreSQL3
1.2.1 通過yum源安裝4
1.2.2 通過源碼編譯安裝5
1.2.3 設(shè)置一個軟鏈接7
1.3 客戶端程序和服務器程序8
1.3.1 客戶端程序8
1.3.2 服務器程序11
1.4 創(chuàng)建數(shù)據(jù)庫實例11
1.4.1 創(chuàng)建操作系統(tǒng)用戶11
1.4.2 創(chuàng)建數(shù)據(jù)目錄12
1.4.3 初始化數(shù)據(jù)目錄13
1.5 啟動和停止數(shù)據(jù)庫服務器14
1.5.1 使用service方式15
1.5.2 使用pg_ctl進行管理15
1.5.3 其他啟動和關(guān)閉數(shù)據(jù)庫服務器的方式16
1.5.4 配置開機啟動16
1.6 數(shù)據(jù)庫配置基礎(chǔ)17
1.6.1 配置文件的位置17
1.6.2 pg_hba.conf17
1.6.3 postgresql.conf19
1.6.4 允許遠程訪問數(shù)據(jù)庫20
1.7 本章小結(jié)22
第2章 客戶端工具23
2.1 pgAdmin 4簡介23
2.1.1 pgAdmin 4 安裝23
2.1.2 pgAdmin 4 使用23
2.2 psql功能及應用26
2.2.1 使用psql連接數(shù)據(jù)庫26
2.2.2 psql元命令介紹28
2.2.3 psql導入、導出表數(shù)據(jù)31
2.2.4 psql的語法和選項介紹34
2.2.5 psql執(zhí)行sql腳本36
2.2.6 psql如何傳遞變量到SQL37
2.2.7 使用psql定制日常維護腳本38
2.2.8 psql亮點功能39
2.3 本章小結(jié)43
第3章 數(shù)據(jù)類型44
3.1 數(shù)字類型44
3.1.1 數(shù)字類型列表44
3.1.2 數(shù)字類型操作符和數(shù)學函數(shù)46
3.2 字符類型47
3.2.1 字符類型列表47
3.2.2 字符類型函數(shù)48
3.3 時間/日期類型49
3.3.1 時間/日期類型列表49
3.3.2 時間/日期類型操作符50
3.3.3 時間/日期類型常用函數(shù)51
3.4 布爾類型52
3.5 網(wǎng)絡地址類型53
3.5.1 網(wǎng)絡地址類型列表54
3.5.2 網(wǎng)絡地址操作符55
3.5.3 網(wǎng)絡地址函數(shù)56
3.6 數(shù)組類型56
3.6.1 數(shù)組類型定義56
3.6.2 數(shù)組類型值輸入56
3.6.3 查詢數(shù)組元素57
3.6.4 數(shù)組元素的追加、刪除、更新58
3.6.5 數(shù)組操作符58
3.6.6 數(shù)組函數(shù)59
3.7 范圍類型60
3.7.1 范圍類型列表60
3.7.2 范圍類型邊界61
3.7.3 范圍類型操作符62
3.7.4 范圍類型函數(shù)62
3.7.5 給范圍類型創(chuàng)建索引63
3.8 json/jsonb類型63
3.8.1 json類型簡介63
3.8.2 查詢json數(shù)據(jù)64
3.8.3 jsonb與json差異64
3.8.4 jsonb與json操作符65
3.8.5 jsonb與json函數(shù)66
3.8.6 jsonb鍵/值的追加、刪除、更新66
3.9 數(shù)據(jù)類型轉(zhuǎn)換68
3.9.1 通過格式化函數(shù)進行轉(zhuǎn)換68
3.9.2 通過CAST函數(shù)進行轉(zhuǎn)換68
3.9.3 通過::操作符進行轉(zhuǎn)換69
3.10 本章小結(jié)70
第4章 SQL高級特性71
4.1 WITH查詢71
4.1.1 復雜查詢使用CTE71
4.1.2 遞歸查詢使用CTE72
4.2 批量插入74
4.2.1 方式一:INSERT INTO...SELECT...74
4.2.2 方式二:INSERT INTO VALUES (),(),...()75
4.2.3 方式三:COPY或\COPY元命令75
4.3 RETURNING返回修改的數(shù)據(jù)76
4.3.1 RETURNING返回插入的數(shù)據(jù)76
4.3.2 RETURNING返回更新后數(shù)據(jù)77
4.3.3 RETURNING返回刪除的數(shù)據(jù)77
4.4 UPSERT78
4.4.1 UPSERT場景演示78
4.4.2 UPSERT語法79
4.5 數(shù)據(jù)抽樣80
4.5.1 SYSTEM抽樣方式81
4.5.2 BERNOULLI抽樣方式82
4.6 聚合函數(shù)84
4.6.1 string_agg函數(shù)84
4.6.2 array_agg函數(shù)85
4.7 窗口函數(shù)86
4.7.1 窗口函數(shù)語法86
4.7.2 avg() OVER()87
4.7.3 row_number()88
4.7.4 rank()89
4.7.5 dense_rank ()89
4.7.6 lag()90
4.7.7 first_value ()91
4.7.8 last_value ()91
4.7.9 nth_value ()92
4.7.10 窗口函數(shù)別名的使用92
4.8 本章小結(jié)93
核 心 篇
第5章 體系結(jié)構(gòu)96
5.1 邏輯和物理存儲結(jié)構(gòu)96
5.1.1 邏輯存儲結(jié)構(gòu)96
5.1.2 物理存儲結(jié)構(gòu)97
5.2 進程結(jié)構(gòu)105
5.2.1 守護進程與服務進程105
5.2.2 輔助進程105
5.3 內(nèi)存結(jié)構(gòu)106
5.3.1 本地內(nèi)存106
5.3.2 共享內(nèi)存107
5.4 本章小結(jié)107
第6章 并行查詢109
6.1 并行查詢相關(guān)配置參數(shù)109
6.2 并行掃描111
6.2.1 并行順序掃描111
6.2.2 并行索引掃描112
6.2.3 并行index-only掃描114
6.2.4 并行bitmap heap掃描115
6.3 并行聚合117
6.4 多表關(guān)聯(lián)119
6.4.1 Nested loop多表關(guān)聯(lián)120
6.4.2 Merge join多表關(guān)聯(lián)121
6.4.3 Hash join多表關(guān)聯(lián)122
6.5 本章小結(jié)124
第7章 事務與并發(fā)控制125
7.1 事務和并發(fā)控制的概念125
7.1.1 事務的基本概念和性質(zhì)125
7.1.2 并發(fā)引發(fā)的現(xiàn)象126
7.1.3 ANSI SQL標準的事務隔離級別129
7.2 PostgreSQL的事務隔離級別130
7.2.1 查看和設(shè)置數(shù)據(jù)庫的事務隔離級別131
7.2.2 修改全局的事務隔離級別132
7.2.3 查看當前會話的事務隔離級別132
7.2.4 設(shè)置當前會話的事務隔離級別132
7.2.5 設(shè)置當前事務的事務隔離級別133
7.3 PostgreSQL的并發(fā)控制133
7.3.1 基于鎖的并發(fā)控制134
7.3.2 基于多版本的并發(fā)控制134
7.3.3 通過pageinspect觀察MVCC137
7.3.4 使用pg_repack解決表膨脹問題140
7.3.5 支持事務的DDL140
7.4 本章小結(jié)141
第8章 分區(qū)表142
8.1 分區(qū)表的