自2019年底加入墨天輪數(shù)據(jù)社區(qū)以來,筆者在PG樂知樂享專欄持續(xù)撰寫了與PostgreSQL相關(guān)的文章,近幾年陸續(xù)撰寫了一些有關(guān)各版本新特性方面的文章。由于PostgreSQL每個版本發(fā)布的新特性較多,因此要想全面、完整地掌握PostgreSQL新特性十分困難。本書對PostgreSQL的7個大版本:從PostgreSQL 10到PostgreSQL 16,根據(jù)公開的新特性實(shí)驗手冊、新特性相關(guān)的文章、郵件列表、社區(qū)核心提交者相關(guān)的博客,以及官方Release Notes等素材進(jìn)行精加工,并從主要性能、可靠性、運(yùn)維管理、開發(fā)易用性、系統(tǒng)層5個方面進(jìn)行介紹。在當(dāng)前國內(nèi)外環(huán)境下,PostgreSQL正在不斷崛起,本書從新特性的視角幫助讀者掌握數(shù)據(jù)庫的正確使用方式。
彭沖,中國PostgreSQL分會PostgreSQL ACE,多年從事基于PostgreSQL數(shù)據(jù)庫的軟件研發(fā),擅長于PL/PGSQL業(yè)務(wù)遷移及優(yōu)化,曾在天津通卡作為核心開發(fā)人員將項目成功實(shí)施于委內(nèi)瑞拉交通部現(xiàn)場,并成功完成全國公交系統(tǒng)整體遷移升級。后在銀聯(lián)體系從事商戶交易數(shù)據(jù)異構(gòu)處理工作。2019年加入云和恩墨,在數(shù)據(jù)庫生態(tài)產(chǎn)品群從事開源數(shù)據(jù)庫及國產(chǎn)數(shù)據(jù)庫的建設(shè),熱衷于PostgreSQL及openGauss/MogDB數(shù)據(jù)庫實(shí)踐技術(shù)分享。
第1章 PostgreSQL 10新特性 1
1.1 PostgreSQL 10的主要性能提升 1
1.1.1 數(shù)據(jù)分區(qū) 1
1.1.2 并行特性增強(qiáng) 1
1.1.3 統(tǒng)計信息擴(kuò)展 2
1.1.4 AFTER觸發(fā)器性能增強(qiáng) 4
1.1.5 Aggregate操作支持下推 5
1.2 PostgreSQL 10的可靠性提高 7
1.2.1 仲裁提交引入 7
1.2.2 HASH索引支持記錄WAL 8
1.2.3 事務(wù)提交狀態(tài)檢測 8
1.3 PostgreSQL 10的運(yùn)維管理優(yōu)化 9
1.3.1 WAL文件大小擴(kuò)容 9
1.3.2 WAL支持在線壓縮 10
1.3.3 ICU標(biāo)準(zhǔn)庫引入 10
1.3.4 活動會話視圖增強(qiáng) 10
1.3.5 HBA文件新增系統(tǒng)視圖 11
1.3.6 promote子命令增加等待模式 12
1.3.7 基礎(chǔ)備份增強(qiáng) 12
1.3.8 臨時復(fù)制槽引入 13
1.3.9 行級安全策略優(yōu)化 13
1.3.10 PSQL工具允許條件式交互 15
1.4 PostgreSQL 10的開發(fā)易用性提升 15
1.4.1 聲明式分區(qū)引入 15
1.4.2 表級數(shù)據(jù)發(fā)布與訂閱 17
1.4.3 標(biāo)識列引入 18
1.4.4 全文檢索支持JSON與JSONB數(shù)據(jù)類型 21
1.4.5 xmltable函數(shù)引入 22
1.5 PostgreSQL 10的系統(tǒng)層變化 24
1.5.1 XLOG重命名 24
1.5.2 系統(tǒng)元數(shù)據(jù)引入 25
1.5.3 配置參數(shù)引入 26
1.5.4 口令加密安全性提高 26
1.5.5 預(yù)置角色變化 26
1.5.6 附加模塊變化 27
1.6 本章小結(jié) 27
第2章 PostgreSQL 11新特性 28
2.1 PostgreSQL 11的主要性能提升 28
2.1.1 WAL可配置 28
2.1.2 B-Tree索引并行創(chuàng)建 29
2.1.3 HASH操作及HASH JOIN操作支持并行 30
2.1.4 其他并行特性支持 31
2.1.5 表達(dá)式索引引入 32
2.1.6 覆蓋索引引入 33
2.1.7 實(shí)時編譯引入 34
2.1.8 緩存管理改進(jìn) 35
2.1.9 UPDATE操作和DELETE操作支持下推 35
2.2 PostgreSQL 11的可靠性提高 36
2.2.1 數(shù)據(jù)塊校驗和檢測 36
2.2.2 B-Tree索引壞塊檢測 37
2.2.3 查詢ID由32位擴(kuò)充為64位 37
2.3 PostgreSQL 11的運(yùn)維管理優(yōu)化 38
2.3.1 快速添加列 38
2.3.2 維護(hù)操作支持多個表 40
2.3.3 分區(qū)數(shù)據(jù)支持通過父表加載 40
2.3.4 新增KILL信號 40
2.3.5 WAL支持離線重構(gòu) 40
2.3.6 PSQL工具支持記錄語句執(zhí)行情況 41
2.4 PostgreSQL 11的開發(fā)易用性提升 42
2.4.1 聲明式分區(qū)增強(qiáng) 42
2.4.2 支持事務(wù)控制的存儲過程 43
2.4.3 邏輯復(fù)制支持TRUNCATE操作 44
2.4.4 窗口函數(shù)增強(qiáng) 44
2.5 PostgreSQL 11的系統(tǒng)層變化 45
2.5.1 配置參數(shù)引入 45
2.5.2 預(yù)置角色變化 46
2.5.3 超級用戶權(quán)限下放 46
2.5.4 附加模塊變化 47
2.6 本章小結(jié) 47
第3章 PostgreSQL 12新特性 48
3.1 PostgreSQL 12的主要性能提升 48
3.1.1 CTE優(yōu)化 48
3.1.2 索引效率提升 50
3.1.3 系統(tǒng)函數(shù)優(yōu)化 51
3.2 PostgreSQL 12的運(yùn)維管理優(yōu)化 51
3.2.1 校驗和開關(guān)控制 51
3.2.2 COPY FROM命令數(shù)據(jù)過濾 52
3.2.3 用戶級流復(fù)制超時控制 52
3.2.4 VACUUM操作及ANALYZE操作鎖跳過 53
3.2.5 表及索引清理解耦 54
3.2.6 索引在線重建 54
3.2.7 執(zhí)行計劃顯示非默認(rèn)參數(shù) 55
3.2.8 后臺操作進(jìn)度報告引入 56
3.2.9 備庫升主庫開放SQL接口 57
3.2.10 PSQL工具幫助鏈接添加 57
3.3 PostgreSQL 12的開發(fā)易用性提升 58
3.3.1 聲明式分區(qū)增強(qiáng) 58
3.3.2 運(yùn)算存儲列使用 59
3.3.3 綁定變量窺探引入 60
3.3.4 SQL/JSON path引入 61
3.3.5 枚舉數(shù)據(jù)類型增強(qiáng) 63
3.4 PostgreSQL 12的系統(tǒng)層變化 63
3.4.1 表存儲引擎開放 63
3.4.2 恢復(fù)相關(guān)配置優(yōu)化 64
3.4.3 系統(tǒng)元數(shù)據(jù)引入 64
3.4.4 配置參數(shù)引入 65
3.4.5 流復(fù)制連接數(shù)優(yōu)化 66
3.4.6 DOS攻擊預(yù)防 66
3.4.7 SSL協(xié)議可控 67
3.4.8 附加模塊變化 67
3.5 本章小結(jié) 67
第4章 PostgreSQL 13新特性 68
4.1 PostgreSQL 13的主要性能提升 68
4.1.1 索引去重 68
4.1.2 增量排序 70
4.1.3 庫級索引并發(fā)重建 71
4.1.4 HASH聚合可溢出到磁盤 72
4.1.5 索引并行清理 72
4.1.6 PL/pgSQL提速 74
4.1.7 Windows連接優(yōu)化 75
4.2 PostgreSQL 13的可靠性提高 75
4.2.1 備份可靠性提高 75
4.2.2 流復(fù)制可動態(tài)配置 77
4.3 PostgreSQL 13的運(yùn)維管理優(yōu)化 77
4.3.1 數(shù)據(jù)庫刪除更便捷 77
4.3.2 并行查詢關(guān)聯(lián)PID 78
4.3.3 共享內(nèi)存可觀測 79
4.3.4 基于磁盤的緩存可監(jiān)控 79
4.3.5 后臺操作進(jìn)度報告引入 80
4.3.6 語句日志采樣降噪 80
4.3.7 PSQL工具跟蹤事務(wù)運(yùn)行狀態(tài) 80
4.3.8 pg_rewind工具優(yōu)化 82
4.4 PostgreSQL 13的開發(fā)易用性提升 83
4.4.1 分區(qū)表及邏輯復(fù)制改進(jìn) 83
4.4.2 標(biāo)識列可忽略用戶輸入 84
4.4.3 存儲列可轉(zhuǎn)換為普通列 85
4.4.4 分頁排序可并列排名 86
4.4.5 易用的內(nèi)置函數(shù)引入 87
4.4.6 FF1~FF6時間格式引入 88
4.4.7 Row表達(dá)式使用 88
4.4.8 視圖列名糾正 89
4.5 PostgreSQL 13的系統(tǒng)層變化 89
4.5.1 系統(tǒng)元數(shù)據(jù)引入 89
4.5.2 配置參數(shù)引入 89
4.5.3 對象標(biāo)識符類型引入 90
4.5.4 內(nèi)部術(shù)語引入 91
4.5.5 備庫升主庫流程優(yōu)化 91
4.5.6 INSERT操作自動清理調(diào)優(yōu) 92
4.5.7 WAL用量跟蹤 93
4.5.8 壞塊繞過繼續(xù)恢復(fù) 95
4.5.9 外部表安全性提高 95
4.5.10 附加模塊變化 96
4.6 本章小結(jié) 97
第5章 PostgreSQL 14新特性 98
5.1 PostgreSQL 14的主要性能提升 98
5.1.1 高并發(fā)連接優(yōu)化 98
5.1.2 緊急清理模式引入 99
5.1.3 列級壓縮可配置 99
5.1.4 邏輯復(fù)制改進(jìn) 101
5.1.5 嵌套循環(huán)改進(jìn) 102
5.1.6 并行特性增強(qiáng) 103
5.2 PostgreSQL 14的可靠性提高 104
5.2.1 數(shù)據(jù)結(jié)構(gòu)檢測 105
5.2.2 備節(jié)點(diǎn)可作為恢復(fù)源 105
5.2.3 密碼長度限制取消 107
5.3 PostgreSQL 14的運(yùn)維管理優(yōu)化 107
5.3.1 查詢ID引入 108
5.3.2 索引表空間在線移動 111
5.3.3 觸發(fā)器在線重建 112
5.3.4 控制客戶端連接 113
5.3.5 后臺操作進(jìn)度報告引入 114
5.3.6 可觀測性增強(qiáng) 115
5.4 PostgreSQL 14的開發(fā)易用性提升 115
5.4.1 多范圍類型引入 115
5.4.2 存儲過程支持OUT模式參數(shù) 116
5.4.3 新形式的SQL函數(shù)引入 116
5.4.4 JSON操作功能增強(qiáng) 118
5.4.5 遞歸查詢改進(jìn) 119
5.4.6 易用的內(nèi)置函數(shù)引入 122
5.5 PostgreSQL 14的系統(tǒng)層變化 125
5.5.1 系統(tǒng)元數(shù)據(jù)引入 125
5.5.2 系統(tǒng)函數(shù)變化 126
5.5.3 預(yù)置角色變化 126
5.5.4 配置參數(shù)變化 128
5.5.5 客戶端C驅(qū)動改進(jìn) 129
5.5.6 客戶端認(rèn)證安全性提高 130
5.5.7 附加模塊變化 131
5.6 本章小結(jié) 133
第6章 PostgreSQL 15新特性 135
6.1 PostgreSQL 15的主要性能提升 135
6.1.1 統(tǒng)計信息內(nèi)存化 135
6.1.2 增量排序算法改進(jìn) 136
6.1.3 WAL恢復(fù)預(yù)讀取 137
6.1.4 全塊寫新增壓縮算法 138
6.1.5 備份效率提高 138
6.1.6 并行特性增強(qiáng) 140
6.2 PostgreSQL 15的可靠性提高 141
6.2.1 統(tǒng)計信息一致性讀取 141
6.2.2 統(tǒng)一非獨(dú)占備份模式引入 142
6.2.3 本地化Collation相關(guān)增強(qiáng) 142
6.2.4 流復(fù)制支持UNLOGGED序列 144
6.2.5 pg_rewind工具指定外部配置文件 145
6.3 PostgreSQL 15的運(yùn)維管理優(yōu)化 145
6.3.1 服務(wù)端本地備份引入 145
6.3.2 JSON格式日志引入 147
6.3.3 創(chuàng)建數(shù)據(jù)庫功能增強(qiáng) 150
6.3.4 COPY操作對文本格式增強(qiáng) 150
6.3.5 執(zhí)行計劃顯示信息改進(jìn) 151
6.3.6 pg_receivewal工具壓縮功能增強(qiáng) 153
6.3.7 PSQL工具優(yōu)化 153
6.4 PostgreSQL 15的開發(fā)易用性提升 155
6.4.1 MERGE語句引入 155
6.4.2 NULL值與UNIQUE約束更搭 162
6.4.3 numeric數(shù)據(jù)類型改進(jìn) 163
6.4.4 正則表達(dá)式函數(shù)引入 164
6.4.5 分區(qū)表改進(jìn) 165
6.4.6 邏輯復(fù)制改進(jìn) 166
6.5 PostgreSQL 15的系統(tǒng)層變化 167
6.5.1 系統(tǒng)元數(shù)據(jù)引入 167
6.5.2 系統(tǒng)函數(shù)變化 168
6.5.3 預(yù)置角色變化 169
6.5.4 配置參數(shù)變化 170
6.5.5 GRANT命令授權(quán)變化 173
6.5.6 遞歸查詢優(yōu)化 173
6.5.7 公共模式安全性提高 174
6.5.8 視圖安全性提高 176
6.5.9 附加模塊變化 177
6.6 本章小結(jié) 177
第7章 PostgreSQL 16新特性 179
7.1 PostgreSQL 16的主要性能提升 179
7.1.1 并行特性增強(qiáng) 179
7.1.2 預(yù)排序性能提升 180
7.1.3 死元組清理性能提升 180
7.1.4 其他性能提升 180
7.2 PostgreSQL 16的運(yùn)維管理優(yōu)化 181
7.2.1 I/O統(tǒng)計更詳細(xì) 181
7.2.2 pg_dump工具功能增強(qiáng) 182
7.2.3 PSQL工具功能增強(qiáng) 183
7.2.4 VACUUM命令及VACUUMDB工具功能增強(qiáng) 183
7.2.5 pg_hba.conf文件配置更高效 184
7.2.6 普通用戶連接優(yōu)化 184
7.2.7 HOT更新監(jiān)控增強(qiáng) 185
7.2.8 不活躍索引監(jiān)控 185
7.2.9 便捷的參數(shù)化語句分析 186
7.3 PostgreSQL 16的開發(fā)易用性提升 187
7.3.1 邏輯復(fù)制功能完善 187
7.3.2 SQL標(biāo)準(zhǔn)2023部分支持引入 188
7.3.3 SQL/JSON 函數(shù)功能增強(qiáng) 189
7.3.4 數(shù)據(jù)導(dǎo)入默認(rèn)值重定義 192
7.3.5 libpq協(xié)議負(fù)載均衡功能引入 193
7.4 PostgreSQL 16的系統(tǒng)層變化 193
7.4.1 版本兼容性變化 193
7.4.2 系統(tǒng)函數(shù)變化 195
7.4.3 預(yù)置角色變化 196
7.4.4 配置參數(shù)變化 196
7.4.5 初始用戶權(quán)限優(yōu)化 197
7.4.6 成員角色權(quán)限變化 197
7.4.7 附加模塊變化 200
7.5 本章小結(jié) 200