前言
第一篇 準備篇
第1章 PostgreSQL簡介 2
1.1 什麼是PostgreSQL 2
1.1.1 PostgreSQL概述 2
1.1.2 PostgreSQL的發展曆史 2
1.1.3 PostgreSQL數據庫的優勢 3
1.1.4 PostgreSQL應用現狀和發展趨勢 4
1.2 PostgreSQL數據庫與其他數據庫的對比 4
1.2.1 PostgreSQL與MySQL數據庫的對比 4
1.2.2 PostgreSQL與Oracle數據庫的對比 6
1.3 小結 6
第2章 PostgreSQL安裝與配置 7
2.1 從發行版本安裝 7
2.1.1 在Debian或Ubuntu下的安裝 7
2.1.2 在Redhat、CentOS或Fedora下的安裝 9
2.1.3 在Windows下的安裝 12
2.1.4 發行版安裝總結 16
2.2 從源碼安裝 16
2.2.1 編譯安裝過程介紹 16
2.2.2 下載源代碼 17
2.2.3 編譯及安裝 18
2.2.4 安裝後的配置 20
2.2.5 創建數據庫簇 21
2.2.6 安裝contrib目錄下的工具 21
2.2.7 啓動和停止數據庫 21
2.2.8 編譯安裝時的常見問題及解決方法 22
2.3 安裝技巧介紹 24
2.3.1 在Redhat、CentOS下使用二進製包安裝較新版本的方法 24
2.3.2 如何使用較大的數據塊提高I/O性能 25
2.4 PostgreSQL的簡單配置 25
2.4.1 修改監聽的IP和端口 25
2.4.2 與數據庫log相關的參數 25
2.4.3 內存參數的設置 26
2.5 小結 26
第3章 SQL語言入門 27
3.1 SQL語句語法簡介 27
3.1.1 語句的分類 27
3.1.2 詞法結構 27
3.2 DDL語句 28
3.2.1 建錶語句 28
3.2.2 刪除錶語句 30
3.3 DML語句 30
3.3.1 插入語句 30
3.3.2 更新語句 31
3.3.3 刪除語句 31
3.4 查詢語句 31
3.4.1 單錶查詢語句 31
3.4.2 過濾條件的查詢 32
3.4.3 排序 32
3.4.4 分組查詢 33
3.4.5 錶join 34
3.5 其他SQL語句 36
3.5.1 INSERT INTO... SELECT語句 36
3.5.2 UNION語句 36
3.5.3 TRUNCATE TABLE語句 37
3.6 小結 37
第二篇 基礎篇
第4章 psql工具的使用介紹 40
4.1 psql介紹 40
4.2 psql的簡單使用 40
4.3 psql的常用命令 42
4.3.1 d命令 42
4.3.2 指定字符集編譯的命令 45
4.3.3 pset命令 46
4.3.4 x命令 46
4.3.5 執行存儲在外部文件中的SQL命令 47
4.3.6 顯示信息的命令 48
4.3.7 更多的命令 49
4.4 psql的使用技巧和注意事項 50
4.4.1 曆史命令與補全的功能 50
4.4.2 自動提交方麵的技巧 50
4.4.3 如何得到psql中命令實際執行的SQL 51
4.5 小結 53
第5章 數據類型 54
5.1 類型介紹 54
5.1.1 類型的分類 54
5.1.2 類型輸入與轉換 55
5.2 布爾類型 56
5.2.1 布爾類型解釋 56
5.2.2 布爾類型的操作符 58
5.3 數值類型 59
5.3.1 數值類型解釋 59
5.3.2 整數類型 59
5.3.3 精確的小數類型 59
5.3.4 浮點數類型 60
5.3.5 序列類型 61
5.3.6 貨幣類型 61
5.3.7 數學函數和操作符 62
5.4 字符串類型 64
5.4.1 類型解釋 64
5.4.2 字符串函數和操作符 65
5.5 二進製數據類型 67
5.5.1 二進製數據類型解釋 67
5.5.2 二進製數據類型轉義錶示 67
5.5.3 二進製數據類型的函數 68
5.6 位串類型 69
5.6.1 位串類型解釋 69
5.6.2 位串類型的使用 69
5.6.3 位串的操作符及函數 70
5.7 日期/時間類型 71
5.7.1 日期/時間類型詳解 71
5.7.2 日期輸入 72
5.7.3 時間輸入 73
5.7.4 特殊值 75
5.7.5 函數和操作符列錶 75
5.7.6 時間函數 77
5.7.7 extract和date_part函數 80
5.8 枚舉類型 81
5.8.1 枚舉類型的使用 81
5.8.2 枚舉類型的說明 82
5.8.3 枚舉類型的函數 83
5.9 幾何類型 84
5.9.1 幾何類型概況 84
5.9.2 幾何類型的輸入 84
5.9.3 幾何類型的操作符 89
5.9.4 幾何類型的函數 97
5.10 網絡地址類型 98
5.10.1 網絡地址類型概況 98
5.10.2 inet與cidr類型 98
5.10.3 macaddr類型 101
5.10.4 網絡地址類型的操作符 101
5.10.5 網絡地址類型的函數 102
5.11 復閤類型 103
5.11.1 復閤類型的定義 103
5.11.2 復閤類型的輸入 104
5.11.3 訪問復閤類型 105
5.11.4 修改復閤類型 105
5.11.5 復閤類型的輸入與輸齣 106
5.12 XML類型 107
5.12.1 XML類型的輸入 107
5.12.2 字符集的問題 108
5.12.3 XML類型的函數 109
5.13 JSON類型 114
5.13.1 JSON類型簡介 115
5.13.2 JSON類型的輸入與輸齣 115
5.13.3 JSON類型的操作符 116
5.13.4 JSON類型的函數 118
5.13.5 JSON類型的索引 121
5.14 Range類型 125
5.14.1 Range類型簡介 125
5.14.2 創建Range類型 126
5.14.3 Range類型的輸入與輸齣 127
5.14.4 Range類型的操作符 130
5.14.5 Range類型的函數 130
5.14.6 Range類型的索引和約束 131
5.15 數組類型 132
5.15.1 數組類型的聲明 132
5.15.2 如何輸入數組值 133
5.15.3 訪問數組 135
5.15.4 修改數組 137
5.15.5 數組的操作符 138
5.15.6 數組的函數 139
5.16 僞類型 142
5.17 其他類型 143
5.17.1 UUID類型 143
5.17.2 pg_lsn 類型 143
第6章 邏輯結構管理 145
6.1 數據庫邏輯結構介紹 145
6.2 數據庫基本操作 145
6.2.1 創建數據庫 145
6.2.2 修改數據庫 146
6.2.3 刪除數據庫 147
6.2.4 常見問題及解答 147
6.3 模式 148
6.3.1 模式的定義 148
6.3.2 模式的使用 148
6.3.3 公共模式 150
6.3.4 模式的搜索路徑 150
6.3.5 模式的權限 151
6.3.6 模式的移植性 151
6.4 錶 152
6.4.1 創建錶 152
6.4.2 錶的存儲屬性 154
6.4.3 臨時錶 156
6.4.4 默認值 158
6.4.5 約束 159
6.4.6 修改錶 163
6.4.7 錶繼承及分區錶 167
6.4.8 分區錶 168
6.5 觸發器 173
6.5.1 創建觸發器 173
6.5.2 語句級觸發器與行級觸發器 175
6.5.3 BEFORE觸發器與AFTER觸發器 177
6.5.4 刪除觸發器 178
6.5.5 觸發器的行為 179
6.5.6 觸發器函數中的特殊變量 180
6.6 事件觸發器 180
6.6.1 創建事件觸發器 183
6.6.2 修改事件觸發器 186
6.7 錶空間 186
6.7.1 錶空間的定義 186
6.7.2 錶空間的使用 186
6.8 視圖 187
6.8.1 視圖的定義 187
6.8.2 創建視圖 188
6.8.3 可更新視圖 189
6.9 索引 191
6.9.1 索引簡介 191
6.9.2 索引的分類 192
6.9.3 創建索引 192
6.9.4 並發創建索引 193
6.9.5 修改索引 196
6.9.6 刪除索引 196
6.10 用戶及權限管理 197
6.10.1 用戶和角色 197
6.10.2 創建用戶和角色 198
6.10.3 權限的管理 199
6.10.4 函數和觸發器的權限 202
6.10.5 權限的總結 202
6.10.6 權限的示例 202
6.11 事務、並發、鎖 203
6.11.1 ACID 203
6.11.2 DDL事務 204
6.11.3 事務的使用 204
6.11.4 SAVEPOINT 205
6.11.5 事務隔離級彆 206
6.11.6 兩階段提交 207
6.11.7 鎖機製 209
6.11.8 死鎖及防範 212
6.11.9 錶級鎖命令LOCK TABLE 213
6.11.10 行級鎖命令 213
6.11.11 鎖的查看 214
第7章 PostgreSQL的核心架構 221
7.1 應用程序的訪問接口 221
7.1.1 訪問接口總體圖 221
7.1.2 不同編輯語言的PostgreSQL驅動介紹 222
7.2 進程及內存結構 223
7.2.1 進程和內存架構圖 223
7.2.2 主進程Postmaster 224
7.2.3 SysLogger(係統日誌)進程 224
7.2.4 BgWriter(後颱寫)進程 225
7.2.5 WalWriter(預寫式日誌寫)進程 225
7.2.6 PgArch(歸檔)進程 225
7.2.7 AutoVacuum(自動清理)進程 225
7.2.8 PgStat(統計數據收集)進程 226
7.2.9 共享內存 226
7.2.10 本地內存 226
7.3 目錄結構 227
7.3.1 安裝目錄的結構 227
7.3.2 數據目錄的結構 227
7.3.3 錶空間的目錄 228
第8章 服務管理 229
8.1 服務的啓停和創建 229
8.1.1 啓停方法 229
8.1.2 pg_ctl 230
8.1.3 信號 234
8.1.4 postgres及單用戶模式 234
8.2 服務配置介紹 235
8.2.1 配置參數 235
8.2.2 連接配置項 237
8.2.3 內存配置項 240
8.2.4 預寫式日誌的配置項 241
8.2.5 錯誤報告和日誌項 243
8.3 訪問控製配置文件 246
8.3.1 pg_hba.conf 文件 247
8.3.2 認證方法介紹 248
8.3.3 認證方法實戰 249
8.4 備份和還原 249
8.4.1 邏輯備份 249
8.4.2 pg_dump命令 250
8.4.3 pg_restore命令 254
8.4.4 pg_dump和pg_restore使用舉例 257
8.4.5 物理備份 258
8.4.6 使用LVM快照進行熱備份 259
8.5 常用的管理命令 261
8.5.1 查看係統信息的常用命令 261
8.5.2 係統維護常用命令 267
第三篇 提高篇
第9章 PostgreSQL中執行計劃 270
9.1 執行計劃的解釋 270
9.1.1 EXPLAIN命令 270
9.1.2 EXPLAIN輸齣結果解釋 271
9.1.3 EXPLAIN使用示例 272
9.1.4 全錶掃描 275
9.1.5 索引掃描 275
9.1.6 位圖掃描 275
9.1.7 條件過濾 276
9.1.8 Nestloop Join 277
9.1.9 Hash Join 277
9.1.10 Merge Join 278
9.2 與執行計劃相關的配置項 279
9.2.1 ENABLE_*參數 279
9.2.2 COST基準值參數 279
9.2.3 基因查詢優化的參數 280
9.2.4 其他執行計劃配置項 281
9.3 統計信息的收集 282
9.3.1 統計信息收集器的配置項 282
9.3.2 SQL執行的統計信息輸齣 283
9.3.3 手工收集統計信息 283
第10章 PostgreSQL中的技術內幕 285
10.1 錶中的係統字段 285
10.1.1 oid 286
10.1.2 ctid 288
10.1.3 xmin、xmax、cmin、cmax 289
10.2 多版本並發控製 290
10.2.1 多版本並發控製的原理 290
10.2.2 PostgreSQL中的多版本並發控製 291
10.2.3 PostgreSQL多版本的優劣分析 293
10.3 物理存儲結構 293
10.3.1 PostgreSQL中的術語 293
10.3.2 數據塊結構 293
10.3.3 Tuple結構 294
10.3.4 數據塊空閑空間管理 296
10.3.5 可見性映射錶文件 298
10.4 技術解密 298
10.4.1 Index-only scans 298
10.4.2 Heap-Only Tuples 300
第11章 PostgreSQL的特色功能 302
11.1 規則係統 302
11.1.1 SELECT規則 302
11.1.2 更新規則 303
11.1.3 規則和權限 306
11.1.4 規則和命令狀態 307
11.1.5 規則與觸發器的比較 308
11.2 模式匹配和正則錶達式 308
11.2.1 PostgreSQL中的模式匹配和正則錶達式介紹 308
11.2.2 傳統SQL的LIKE 操作符 309
11.2.3 SIMILAR TO 正則錶達式 310
11.2.4 POSIX 正則錶達式 312
11.2.5 模式匹配函數 substring 313
11.3 listen與notify 315
11.3.1 listen與notify的簡單示例 315
11.3.2 listen與notify的相關命令 316
11.3.3 listen與notify的使用詳解 317
11.4 索引的特色 320
11.4.1 錶達式上的索引 320
11.4.2 部分索引 320
11.4.3 GiST索引 323
11.4.4 SP-GiST索引 325
11.4.5 GIN索引 326
11.5 序列的使用 328
11.5.1 序列的創建 328
11.5.2 序列的使用及相關的函數 329
11.5.3 常見問題及解答 331
11.6 谘詢鎖的使用 333
11.6.1 谘詢鎖的定義 333
11.6.2 谘詢鎖的函數及使用 333
11.6.3 常見問題及解答 337
11.7 SQL/MED 338
11.7.1 SQL/MED的介紹 338
11.7.2 外部數據包裝器對象 339
11.7.3 外部服務器對象 340
11.7.4 用戶映射對象 341
11.7.5 外部錶對象 341
11.7.6 file_fdw使用實例 342
11.7.7 postgres_fdw使用實例 345
第12章 數據庫優化 347
12.1 優化準則和方法 347
12.1.1 優化準則 347
12.1.2 優化方法 348
12.2 硬件知識 348
12.2.1 CPU及服務器體係結構 348
12.2.2 內存 349
12.2.3 硬盤 350
12.3 文件係統及I/O調優 352
12.3.1 文件係統的崩潰恢復 352
12.3.2 Ext2文件係統 353
12.3.3 Ext3文件係統 353
12.3.4 Ext4文件係統 354
12.3.5 XFS文件係統 355
12.3.6 Barriers I/O 355
12.3.7 I/O調優的方法 356
12.4 性能監控 359
12.4.1 數據庫性能視圖 359
12.4.2 Linux監控工具 362
12.5 數據庫配置優化 364
12.5.1 內存配置優化 364
12.5.2 關於雙緩存的優化 366
12.5.3 vacuum中的優化 367
12.5.4 預寫式日誌寫優化 369
第13章 Standby數據庫的搭建 371
13.1 Standby數據庫原理 371
13.1.1PITR原理 371
13.1.2 WAL日誌歸檔 372
13.1.3 流復製 372
13.1.4 Standby的運行原理 373
13.1.5 創建Standby的步驟 373
13.2 pg_basebackup命令行工具 374
13.2.1 pg_basebackup介紹 374
13.2.2 pg_basebackup的命令行參數 375
13.2.3 pg_basebackup使用示例 376
13.3 異步流復製Hot Standby的示例 377
13.3.1 配置環境 377
13.3.2 主數據庫的配置 378
13.3.3 在Standby上生成基礎備份 378
13.3.4 啓動Standby 379
13.4 同步流復製的Standby數據庫 380
13.4.1 同步流復製的架構 380
13.4.2 同步復製的配置 381
13.4.3 配置實例 381
13.5 檢查備庫及流復製情況 383
13.5.1 檢查異步流復製的情況 383
13.5.2 檢查同步流復製的情況 384
13.5.3 視圖pg_stat_replication詳解 385
13.5.4 查看備庫的狀態 385
13.6 Hot Standby的限製 387
13.6.1 Hot Standby的查詢限製 387
13.6.2 Hot Standby的查詢衝突處理 389
13.7 恢復配置詳解 390
13.7.1 歸檔恢復配置的配置項 390
13.7.2 Recovery Target配置 391
13.7.3 Standby Server配置 391
13.8 流復製的注意事項 392
13.8.1 wal_keep_segments參數的配置 392
13.8.2 vacuum_defer_cleanup_age參數的配置 392
第四篇 第三方開源軟件及架構篇
第14章 PgBouncer 394
14.1 PgBouncer 介紹 394
14.2 PgBouncer中的概念 395
14.3 PgBouncer的安裝方法 395
14.4 PgBouncer的簡單使用 395
14.4.1 簡單配置方法 395
14.4.2 啓動PgBouncer 396
14.4.3 停止PgBouncer 397
14.4.4 查看連接池信息 397
14.5 PgBouncer的配置文件詳解 399
14.5.1 “[databases]”部分的配置項 399
14.5.2 “[pgbouncer]”部分的配置項 399
14.5.3 用戶密碼文件 403
第15章 Slony-I的使用 404
15.1 Slony-I中的概念 404
15.1.1 集群 404
15.1.2 節點 405
15.1.3 復製集閤 405
15.1.4 數據原始生産者、數據提供者和數據訂閱者 405
15.1.5 slon守護程序 405
15.1.6 slonik配置程序 405
15.2 Slony-I復製的限製 405
15.3 在Windows下使用pgAdminIII安裝配置Slony-I 406
15.3.1 Windows下安裝Slony-I 406
15.3.2 Windows配置 Slony-I同步實例 407
15.4 在Linux下安裝配置Slony-I 419
15.4.1 編譯安裝Slony-I 419
15.4.2 配置Slony-I復製 421
第16章 Bucardo的使用 426
16.1 Bucardo中的概念 426
16.1.1 Bucardo介紹 426
16.1.2 Bucardo FAQ 426
16.1.3 Bucardo 同步中定義的概念 427
16.2 Bucardo的安裝方法 427
16.2.1 Bucardo的安裝步驟 427
16.2.2 安裝Test-Simple、ExtUtils-MakeMaker、version 428
16.2.3 安裝DBI及DBD::Pg 428
16.2.4 安裝DBIx-Safe 429
16.2.5 安裝Bucardo源碼包 429
16.3 Bucardo同步配置 429
16.3.1 示例環境 429
16.3.2 配置同步的簡要過程 430
16.3.3 bucardo_ctl install 431
16.3.4 bucardo_ctl add db 433
16.3.5 bucardo_ctl add table 433
16.3.6 bucardo_ctl add herd 433
16.3.7 bucardo_ctl add sync 433
16.3.8 bucardo_ctl start 434
16.4 Bucardo的日常維護 434
16.4.1 Bucardo的觸發器日誌清理 434
16.4.2 臨時停止和啓動同步的方法 435
16.4.3 新增錶到同步的方法 435
16.4.4 移除某個錶或序列的方法 435
第17章 PL/Proxy的使用 436
17.1 PL/Proxy中的概念 436
17.1.1 PL/Proxy的定義 436
17.1.2 PL/Proxy的特性說明 438
17.2 PL/Proxy安裝及配置 438
17.2.1 編譯安裝 438
17.2.2 安裝規劃 439
17.2.3 配置過程 439
17.3 PL/Proxy的集群配置詳解 443
17.3.1 Cluster configuration API方式 444
17.3.2 SQL/MED方式配置集群 446
17.4 PL/Proxy語言詳解 446
17.4.1 CONNECT 447
17.4.2 CLUSTER 447
17.4.3 RUN ON 447
17.4.4 SPLIT 448
17.4.5 TARGET 448
17.5 PL/Proxy的一個高可用方案 448
17.5.1 方案介紹 448
17.5.2 方案架構 449
17.5.3 具體實施步驟 449
第18章 pgpool-II的使用 458
18.1 pgpool-II中的概念 458
18.1.1 pgpool-II的定義 458
18.1.2 pgpool-II的架構 459
18.1.3 pgpool-II的工作模式 460
18.1.4 pgpool-II的程序模塊 461
18.2 pgpool-II安裝方法 462
18.2.1 源碼安裝 462
18.2.2 安裝 pgpool_regclass 463
18.2.3 建立 insert_lock 錶 463
18.2.4 安裝C語言函數 463
18.3 pgpool-II配置快速入門 463
18.3.1 pgpool-II的配置文件及啓停方法 464
18.3.2 復製和負載均衡的示例 466
18.3.3 使用流復製的主備模式的示例 467
18.3.4 show命令 468
18.4 pgpool-II高可用配置方法 471
18.4.1 pgpool-II高可用切換及恢復的原理 471
18.4.2 pgpool-II的健康檢查 473
18.4.3 復製和負載均衡模式的高可用示例 473
18.4.4 使用流復製的主備模式下的高可用示例 488
18.5 pgpool-II的總結 492
第19章Postgres-XC的使用 493
19.1 Postgres-XC中的概念 493
19.1.1 Postgres-XC的定義 493
19.1.2 Postgres-XC的特點 493
19.1.3 Postgres-XC的性能 494
19.1.4 Postgres-XC的組件 494
19.2 Postgres-XC的安裝 495
19.2.1 源碼安裝方法 495
19.2.2 Postgres-XC目錄及程序說明 496
19.3 配置Postgres-XC集群 497
19.3.1 集群規劃 497
19.3.2 初始化GTM 498
19.3.3 初始化GTM的備庫 498
19.3.4 初始化GTM Proxy 499
19.3.5 初始化Coordinators、數據節點 499
19.3.6 啓動集群 500
19.3.7 停止集群 501
19.3.8 配置集群節點信息 502
19.4 Postgres-XC的使用 503
19.4.1 建錶詳解 503
19.4.2 使用限製 509
19.4.3 重新分布數據 510
19.4.4 增加Coordinator節點的方法 512
19.4.5 移除Coordinator節點的方法 513
19.4.6 增加Datanode節點的方法 513
19.4.7 移除Datanode節點的方法 514
第20章 高可用性方案設計 516
20.1 高可用架構基礎 516
20.1.1 各種高可用架構介紹 516
20.1.2 服務的可靠性設計 517
20.1.3 數據可靠性設計 517
20.2 基於共享存儲的高可用方案 517
20.2.1 SAN存儲的方案 517
20.2.2 DRBD的方案 518
20.3 WAL日誌同步或流復製同步的方案 519
20.3.1 持續復製歸檔的standby的方法 519
20.3.2 異步流復製的方案 519
20.3.3 基於同步流復製方案 519
20.4 基於觸發器的同步方案 520
20.4.1 方案的特點 520
20.4.2 基於觸發器方案的同步軟件介紹 520
20.5 基於語句中間件的高可用方案 520
20.5.1 方案的特點 520
20.5.2 基於語句中間件的開源軟件介紹 521
· · · · · · (
收起)