目 錄
前 言
第1章 PostgreSQL服務器簡介 1
1.1 為什麼在服務器中進行程序設計 2
1.2 關於本書的代碼示例 5
1.3 超越簡單函數 7
1.4 使用觸發器管理相關數據 8
1.5 審核更改 11
1.6 數據清洗 16
1.7 定製排序方法 17
1.8 程序設計最佳實踐 18
1.8.1 KISS——盡量簡單(keep it simple stupid) 18
1.8.2 DRY——不要寫重復的代碼(don’t repeat yourself) 19
1.8.3 YAGNI——你並不需要它(you ain’t gonna need it) 19
1.8.4 SOA——服務導嚮架構(service-oriented architecture) 19
1.8.5 類型的擴展 20
1.9 關於緩存 21
1.10 總結——為什麼在服務器中進行程序設計 21
1.10.1 性能 21
1.10.2 易於維護 22
1.10.3 保證安全的簡單方法 22
1.11 小結 22
第2章 服務器程序設計環境 24
2.1 購置成本 25
2.2 開發者的可用性 26
2.3 許可證書 26
2.4 可預測性 27
2.5 社區 28
2.6 過程化語言 28
2.6.1 平颱兼容性 29
2.6.2 應用程序設計 30
2.6.3 更多基礎 32
2.7 小結 35
第3章 第一個PL/pgSQL函數 36
3.1 為什麼是PL / pgSQL 36
3.2 PL/pgSQL函數的結構 37
3.3 條件錶達式 39
3.3.1 通過計數器循環 43
3.3.2 對查詢結果進行循環 45
3.3.3 PERFORM與SELECT 47
3.4 返迴記錄 47
3.5 處理函數結果 50
3.6 結論 51
第4章 返迴結構化數據 52
4.1 集閤與數組 52
4.2 返迴集閤 53
4.3 使用返迴集閤的函數 54
4.4 基於視圖的函數 56
4.5 OUT參數與記錄集 59
4.5.1 OUT參數 59
4.5.2 返迴記錄集 60
4.5.3 使用RETURNS TABLE 61
4.5.4 不返迴預定義結構 62
4.5.5 返迴SETOF ANY 63
4.5.6 可變參數列錶 65
4.6 RETURN SETOF變量總結 66
4.7 返迴遊標 66
4.7.1 對從另一個函數中返迴的遊標進行迭代處理 68
4.7.2 函數返迴遊標(多個遊標)的小結 69
4.8 處理結構化數據的其他方法 69
4.8.1 現代復雜數據類型——XML和JSON 69
4.8.2 XML數據類型和從函數中返迴XML數據 70
4.8.3 以JSON格式返迴數據 72
4.9 小結 74
第5章 PL/pgSQL觸發器函數 75
5.1 創建觸發器函數 75
5.2 簡單的“嘿,我被調用瞭”觸發器 76
5.3 審核觸發器 79
5.4 無效的DELETE 81
5.5 無效的TRUNCATE 83
5.6 修改NEW記錄 83
5.7 不可改變的字段觸發器 84
5.8 當觸發器被調用時的控製策略 85
5.8.1 有條件的觸發器 86
5.8.2 在特定字段變化的觸發器 87
5.9 可視化 87
5.10 傳遞給PL/pgSQL TRIGGER函數的變量 88
5.11 小結 88
第6章 PL/pgSQL調試 90
6.1 使用RAISE NOTICE進行“手動”調試 91
6.1.1 拋齣異常 92
6.1.2 文件日誌 94
6.2 可視化調試 95
6.2.1 安裝調試器 96
6.2.2 安裝pgAdmin3 96
6.2.3 使用調試器 96
6.3 小結 98
第7章 使用無限製的開發語言 99
7.1 不受信任的語言是否比受信任的語言差 99
7.2 不受信任的語言是否會拖垮數據庫 100
7.3 為什麼不受信任 100
7.4 PL/Python快速介紹 101
7.4.1 最小的PL/Python函數 101
7.4.2 數據類型轉換 102
7.4.3 使用PL/Python編寫簡單函數 103
7.4.4 在數據庫中運行查詢 106
7.4.5 使用PL/Python編寫觸發器函數 108
7.4.6 構建查詢 113
7.4.7 處理異常 113
7.4.8 Python中的原子性 115
7.4.9 PL/Python調試 116
7.5 跳齣“SQL 數據庫服務器”的限製進行思考 119
7.5.1 在保存圖像時生成縮略圖 119
7.5.2 發送一封電子郵件 120
7.6 小結 121
第8章 使用C編寫高級函數 122
8.1 最簡單的C函數——返迴(a+b) 123
8.1.1 add_func.c 123
8.1.2 Makefile 125
8.1.3 創建add(int,int)函數 126
8.1.4 add_func.sql.in 126
8.1.5 關於寫C函數的總結 127
8.2 為add(int, int)添加功能 127
8.2.1 NULL參數的智能處理 128
8.2.2 與任何數量的參數一起運作 129
8.3 C函數編寫的基礎指南 134
8.4 來自C函數的錯誤報告 136
8.4.1 並非錯誤的“錯誤”狀態 136
8.4.2 消息何時被發送到客戶端 137
8.5 運行查詢與調用PostgreSQL函數 137
8.5.1 使用SPI的示例C函數 138
8.5.2 數據更改的可見性 139
8.5.3 SPI_*函數的更多相關信息 140
8.6 將記錄集作為參數或返迴值處理 140
8.6.1 返迴復雜類型的單個元組 141
8.6.2 從參數元組中提取字段 143
8.6.3 構建一個返迴元組 143
8.6.4 插麯——什麼是Datum 144
8.6.5 返迴一個記錄集 144
8.7 快速獲取數據庫變更 147
8.8 在提交/迴滾時處理情況 148
8.9 在後端間進行同步 148
8.10 C語言的額外資源 149
8.11 小結 149
第9章 使用PL/Proxy擴展數據庫 151
9.1 簡單的單服務器通話 151
9.2 處理跨多數據庫的成功分錶 157
9.2.1 什麼擴展計劃有用和什麼時候有用 158
9.2.2 跨多服務器的數據分區 158
9.2.3 PL/Proxy——分區語言 162
9.2.4 從單數據庫移動數據到分區的數據庫 168
9.3 小結 169
第10章 發布自己的PostgreSQL擴展程序 170
10.1 什麼時候創建擴展程序 170
10.2 未封裝的擴展程序 171
10.3 擴展程序版本 172
10.4 .control文件 173
10.5 構建擴展程序 173
10.6 安裝擴展程序 174
10.7 發布擴展程序 175
10.7.1 關於PostgreSQL Extension Network的簡介 175
10.7.2 注冊以發布擴展程序 176
10.7.3 創建擴展項目的簡單方法 178
10.7.4 提供擴展程序的相關元數據 179
10.7.5 編寫擴展代碼 182
10.7.6 創建程序包 183
10.7.7 嚮PGXN提交程序包 183
10.8 安裝PGXN上的擴展程序 185
10.9 小結 185
· · · · · · (
收起)