Contents 目錄
序言
前言
基 礎 篇
第1章 安裝與配置基礎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 設置一個軟鏈接7
1.3 客戶端程序和服務器程序8
1.3.1 客戶端程序8
1.3.2 服務器程序11
1.4 創(chuàng)建數據庫實例11
1.4.1 創(chuàng)建操作系統用戶11
1.4.2 創(chuàng)建數據目錄12
1.4.3 初始化數據目錄13
1.5 啟動和停止數據庫服務器14
1.5.1 使用service方式15
1.5.2 使用pg_ctl進行管理15
1.5.3 其他啟動和關閉數據庫服務器的方式16
1.5.4 配置開機啟動16
1.6 數據庫配置基礎17
1.6.1 配置文件的位置17
1.6.2 pg_hba.conf17
1.6.3 postgresql.conf19
1.6.4 允許遠程訪問數據庫20
1.7 本章小結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連接數據庫26
2.2.2 psql元命令介紹28
2.2.3 psql導入、導出表數據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 本章小結43
第3章 數據類型44
3.1 數字類型44
3.1.1 數字類型列表44
3.1.2 數字類型操作符和數學函數46
3.2 字符類型47
3.2.1 字符類型列表47
3.2.2 字符類型函數48
3.3 時間/日期類型49
3.3.1 時間/日期類型列表49
3.3.2 時間/日期類型操作符50
3.3.3 時間/日期類型常用函數51
3.4 布爾類型52
3.5 網絡地址類型53
3.5.1 網絡地址類型列表54
3.5.2 網絡地址操作符55
3.5.3 網絡地址函數56
3.6 數組類型56
3.6.1 數組類型定義56
3.6.2 數組類型值輸入56
3.6.3 查詢數組元素57
3.6.4 數組元素的追加、刪除、更新58
3.6.5 數組操作符58
3.6.6 數組函數59
3.7 范圍類型60
3.7.1 范圍類型列表60
3.7.2 范圍類型邊界61
3.7.3 范圍類型操作符62
3.7.4 范圍類型函數62
3.7.5 給范圍類型創(chuàng)建索引63
3.8 json/jsonb類型63
3.8.1 json類型簡介63
3.8.2 查詢json數據64
3.8.3 jsonb與json差異64
3.8.4 jsonb與json操作符65
3.8.5 jsonb與json函數66
3.8.6 jsonb鍵/值的追加、刪除、更新66
3.9 數據類型轉換68
3.9.1 通過格式化函數進行轉換68
3.9.2 通過CAST函數進行轉換68
3.9.3 通過::操作符進行轉換69
3.10 本章小結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返回修改的數據76
4.3.1 RETURNING返回插入的數據76
4.3.2 RETURNING返回更新后數據77
4.3.3 RETURNING返回刪除的數據77
4.4 UPSERT78
4.4.1 UPSERT場景演示78
4.4.2 UPSERT語法79
4.5 數據抽樣80
4.5.1 SYSTEM抽樣方式81
4.5.2 BERNOULLI抽樣方式82
4.6 聚合函數84
4.6.1 string_agg函數84
4.6.2 array_agg函數85
4.7 窗口函數86
4.7.1 窗口函數語法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 窗口函數別名的使用92
4.8 本章小結93
核 心 篇
第5章 體系結構96
5.1 邏輯和物理存儲結構96
5.1.1 邏輯存儲結構96
5.1.2 物理存儲結構97
5.2 進程結構105
5.2.1 守護進程與服務進程105
5.2.2 輔助進程105
5.3 內存結構106
5.3.1 本地內存106
5.3.2 共享內存107
5.4 本章小結107
第6章 并行查詢109
6.1 并行查詢相關配置參數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 多表關聯119
6.4.1 Nested loop多表關聯120
6.4.2 Merge join多表關聯121
6.4.3 Hash join多表關聯122
6.5 本章小結124
第7章 事務與并發(fā)控制125
7.1 事務和并發(fā)控制的概念125
7.1.1 事務的基本概念和性質125
7.1.2 并發(fā)引發(fā)的現象126
7.1.3 ANSI SQL標準的事務隔離級別129
7.2 PostgreSQL的事務隔離級別130
7.2.1 查看和設置數據庫的事務隔離級別131
7.2.2 修改全局的事務隔離級別132
7.2.3 查看當前會話的事務隔離級別132
7.2.4 設置當前會話的事務隔離級別132
7.2.5 設置當前事務的事務隔離級別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 本章小結141
第8章 分區(qū)表142
8.1 分區(qū)表的