PostgreSQL 11從入門到精通(視頻教學版)

PostgreSQL 11從入門到精通(視頻教學版)

《PostgreSQL 11從入門到精通(視頻教學版)》是2019年10月清華大學出版社出版的圖書,作者是李小威。

基本介紹

  • 書名:PostgreSQL 11從入門到精通(視頻教學版)
  • 作者:李小威
  • ISBN:9787302536659
  • 定價:89元
  • 出版社:清華大學出版社
  • 出版時間:2019年10月
內容簡介,圖書目錄,

內容簡介

本書共分18章,內容主要包括PostgreSQL 11的安裝與配置、資料庫的基本操作、表的基本操作、數據類型和運算符、函式、數據的操作、索引、視圖、觸發器、事務和並發控制、用戶管理、備份與還原、性能最佳化、高可用、負載均衡、數據複製、伺服器配置與資料庫監控、資料庫內部結構等內容。本書注重實戰操作,幫助讀者循序漸進地掌握PostgreSQL 11中的各項管理技術。
本書頸端戶共有400多個實例,還有大量的經典習題。隨書贈送了近20小時培訓微葛班形式的視頻教學錄像,詳細講解了書中每一個知識點和每一個資料庫操作的方法和技巧,同時還提供了本書所有例子的原始碼,讀者可以直接查看和調用。
本書適合PostgreSQL資料庫初學者、PostgreSQL資料庫開發人員和PostgreSQL資料庫管理員,同時也能作為高等院校和培訓學校相關專業師生的教學用書。

圖書目錄

第1章 初識PostgreSQL 1
1.1 資料庫基礎 1
1.1.1 什麼是資料庫 1
1.1.2 表 2
1.1.3 數據類型 2
1.1.4 主鍵 2
1.1.5 什麼是開源 3
1.2 資料庫技術構成 3
1.2.1 資料庫系統 3
1.2.2 SQL語言 3
1.2.3 資料庫訪問技術 5
1.3 什麼是POSTGRESQL 6
1.3.1 客戶機-伺服器軟體 6
1.3.2 PostgreSQL發展歷程 6
1.3.3 PostgreSQL的優勢 7
1.4 如何學習POSTGRESQL 7
第2章 PostgreSQL 11的安裝與配置 9
2.1 安裝與啟動POSTGRESQL 11.2 9
2.1.1 下載PostgreSQL 11.2安裝包 9
2.1.2 安裝PostgreSQL 11.2 11
2.1.3 啟動PostgreSQL伺服器 16
2.2 PGADMIN 4的基本操作 18
2.2.1 pgAdmin 4的啟動與連線 18
2.2.2 pgAdmin 4的界面簡介 19
2.2.3 配置PostgreSQL伺服器的屬性 25
2.2.4 執行SQL查詢語句 26
2.3 使用PSQL工具登錄POSTGRESQL資料庫 27
2.4 LINUX系統下安裝POSTGRESQL 11 28
2.5 常見問題及解答 29
疑問1:連線pgAdmin時提示“伺服器未祝墓員棗監聽”的錯誤怎么辦? 29
疑問2:如何修改伺服器登錄密碼? 29
2.6 本章小結 30
2.7 經典習題 30
第3章 資料庫的基本操作 31
3.1 創建資料庫 31
3.1.1 使用對象瀏覽器創建資料庫 31
3.1.2 使用SQL創建資料庫 34
3.2 修改資料庫的屬性 35
3.2.1 使用對象瀏覽器修改資料庫的屬性 35
3.2.2 使用SQL語句修改數樂朵頸據庫屬性 36
3.3 刪除辣碑定資料庫 37
3.3.1 使用對象瀏覽器刪除資料庫 37
3.3.2 使用SQL語句刪除資料庫 38
3.4 綜合案例——資料庫的創建和刪除 39
3.5 常見問題及解答 40
疑問1:如何使用SQL語奔烏元龍句創建具有一定條件的資料庫? 40
疑問2:使用DROP語句要注意什麼問題? 40
3.6 經典習題 41
第4章 數據表的基本操作 42
4.1 創建數據表定凝料 42
4.1.1 創建數據表 42
4.1.2 使用主鍵約束 47
4.1.3 使用外鍵約束 48
4.1.4 使用非空約束 51
4.1.5 使用唯一性約束 51
4.1.6 使用默認約束 53
4.2 修改數據表 53
4.2.1 修改表名 53
4.2.2 修改欄位的數據類型 54
4.2.3 修改欄位名 55
4.2.4 添加欄位 56
4.2.5 刪除欄位 58
4.2.6 刪除表的外鍵約束 58
4.3 刪除數據表 60
4.3.1 刪除沒有被關聯的表 60
4.3.2 刪除被其他表關聯的主表 61
4.4 POSTGRESQL 11的新特性——新增帶默認值的欄位不再重寫數據表 63
4.5 綜合案例——數據表的基本操作 64
4.6 常見問題及解答 71
疑問1:表刪除和修改操作時需注意什麼問題? 71
疑問2:每一個表中都要有一個主鍵嗎? 71
4.7 經典習題 71
第5章 數據類型和運算符 73
5.1 POSTGRESQL數據類型介紹 73
5.1.1 整數類型 73
5.1.2 浮點數類型 74
5.1.3 任意精度類型 75
5.1.4 日期與時間類型 75
5.1.5 字元串類型 82
5.1.6 二進制類型 84
5.1.7 布爾類型 85
5.1.8 數組類型 85
5.2 如何選擇數據類型 86
5.3 常見運算符介紹 87
5.3.1 運算符概述 87
5.3.2 算術運算符 88
5.3.3 比較運算符 90
5.3.4 邏輯運算符 97
5.3.5 運算符的優先權 99
5.4 綜合案例——運算符的使用 100
5.5 常見問題及解答 102
疑問1:PostgreSQL中可以存儲檔案嗎? 102
疑問2:二進制和普通字元串的區別是什麼? 102
5.6 經典習題 102
第6章 PostgreSQL函式 103
6.1 POSTGRESQL函式簡介 103
6.2 數學函式 103
6.2.1 絕對值函式ABS(x)和返回圓周率的函式PI() 104
6.2.2 平方根函式SQRT(x)和求余函式MOD(x,y) 104
6.2.3 獲取整數的函式CEIL(x)、CEILING(x)和FLOOR(x) 105
6.2.4 四捨五入函式ROUND(x)和ROUND(x,y) 106
6.2.5 符號函式SIGN(x) 107
6.2.6 冪運算函式POW(x,y)、POWER(x,y)和EXP(x) 108
6.2.7 對數運算函式LOG(x) 109
6.2.8 角度與弧度相互轉換的函式RADIANS(x)和DEGREES(x) 109
6.2.9 正弦函式SIN(x)和反正弦函式ASIN(x) 110
6.2.10 餘弦函式COS(x)和反餘弦函式ACOS(x) 111
6.2.11 正切函式、反正切函式和餘切函式 112
6.3 字元串函式 113
6.3.1 計算字元串字元數的函式和字元串長度的函式 113
6.3.2 合併字元串函式CONCAT(s1,s2,…)、CONCAT_WS(x,s1,s2,…) 114
6.3.3 獲取指定長度的字元串的函式LEFT(s,n)和RIGHT(s,n) 115
6.3.4 填充字元串的函式LPAD(s1,len,s2)和RPAD(s1,len,s2) 116
6.3.5 刪除空格的函式LTRIM(s)、RTRIM(s)和TRIM(s) 117
6.3.6 刪除指定字元串的函式TRIM(s1 FROM s) 119
6.3.7 重複生成字元串的函式REPEAT(s,n) 119
6.3.8 替換函式REPLACE(s,s1,s2) 120
6.3.9 獲取子串的函式SUBSTRING(s,n,len) 120
6.3.10 匹配子串開始位置的函式POSITION(str1 IN str) 121
6.3.11 字元串逆序的函式REVERSE(s) 121
6.4 日期和時間函式 122
6.4.1 獲取當前日期的函式和獲取當前時間的函式 122
6.4.2 獲取當前日期和時間的函式 123
6.4.3 獲取日期的指定值的函式EXTRACT(type FROM d) 124
6.4.4 日期和時間的運算操作 126
6.5 條件判斷函式 129
6.6 系統信息函式 130
6.6.1 獲取PostgreSQL版本號 130
6.6.2 獲取用戶名的函式 131
6.7 加密函式 131
6.7.1 加密函式MD5(str) 131
6.7.2 加密函式ENCODE(str,pswd_str) 132
6.7.3 解密函式DECODE(crypt_str,pswd_str) 132
6.8 改變數據類型的函式 133
6.9 綜合案例——POSTGRESQL函式的使用 133
6.10 常見問題及解答 137
疑問1:如何從日期時間值中獲取年、月、日等部分日期或時間值? 137
疑問2:如何計算年齡? 137
6.11 經典習題 137
第7章 插入、更新與刪除數據 139
7.1 插入數據 139
7.1.1 為表的所有欄位插入數據 139
7.1.2 為表的指定欄位插入數據 142
7.1.3 同時插入多條記錄 143
7.1.4 將查詢結果插入到表中 145
7.2 更新數據 147
7.3 刪除數據 149
7.4 綜合案例——記錄的插入、更新和刪除 152
7.5 常見問題及解答 158
疑問1:插入記錄時可以不指定欄位名稱嗎? 158
疑問2:更新或者刪除表時必須指定WHERE子句嗎? 158
7.6 經典習題 158
第8章 查詢數據 160
8.1 基本查詢語句 160
8.2 單表查詢 162
8.2.1 查詢所有欄位 163
8.2.2 查詢指定欄位 164
8.2.3 查詢指定記錄 166
8.2.4 帶IN關鍵字的查詢 168
8.2.5 帶BETWEEN AND的範圍查詢 170
8.2.6 帶LIKE的字元匹配查詢 171
8.2.7 查詢空值 172
8.2.8 帶AND的多條件查詢 174
8.2.9 帶OR的多條件查詢 175
8.2.10 查詢結果不重複 176
8.2.11 對查詢結果排序 177
8.2.12 分組查詢 180
8.2.13 用LIMIT限制查詢結果的數量 182
8.3 使用集合函式查詢 184
8.3.1 COUNT()函式 184
8.3.2 SUM()函式 186
8.3.3 AVG()函式 187
8.3.4 MAX()函式 188
8.3.5 MIN()函式 190
8.4 連線查詢 191
8.4.1 內連線查詢 191
8.4.2 外連線查詢 194
8.4.3 複合條件連線查詢 196
8.5 子查詢 198
8.5.1 帶ANY、SOME關鍵字的子查詢 198
8.5.2 帶ALL關鍵字的子查詢 199
8.5.3 帶EXISTS關鍵字的子查詢 199
8.5.4 帶IN關鍵字的子查詢 201
8.5.5 帶比較運算符的子查詢 203
8.6 合併查詢結果 205
8.7 為表和欄位取別名 208
8.7.1 為表取別名 208
8.7.2 為欄位取別名 210
8.8 使用正則表達式查詢 212
8.8.1 查詢以特定字元或字元串開頭的記錄 213
8.8.2 查詢以特定字元或字元串結尾的記錄 213
8.8.3 用符號"".""來替代字元串中的任意一個字元 214
8.8.4 使用""*""和""+""來匹配多個字元 215
8.8.5 匹配指定字元串 216
8.8.6 匹配指定字元中的任意一個 217
8.8.7 匹配指定字元以外的字元 218
8.8.8 使用{M}或者{M,N}來指定字元串連續出現的次數 219
8.9 POSTGRESQL 11新特性——PSQL新增GDESC選項 220
8.10 綜合案例——數據表查詢操作 220
8.11 常見問題及解答 228
疑問1:DISTINCT可以套用於所有的列嗎? 228
疑問2:ORDER BY可以和LIMIT混合使用嗎? 229
疑問3:什麼時候使用單引號? 229
疑問4:在WHERE子句中必須使用圓括弧嗎? 229
疑問5:為什麼使用通配符格式正確,卻沒有查找出符合條件的記錄? 229
8.12 經典習題 229
第9章 索引 230
9.1 索引簡介 230
9.1.1 索引的含義和特點 230
9.1.2 索引的分類 231
9.1.3 索引的設計原則 232
9.2 創建索引 232
9.2.1 使用pgAdmin創建索引 232
9.2.2 使用SQL語句創建索引 233
9.3 重命名索引 236
9.4 刪除索引 237
9.5 POSTGRESQL 11的新特性1 ——創建索引時支持INCLUDE方式 238
9.6 POSTGRESQL 11的新特性2——執行並行創建索引 239
9.7 綜合案例——創建索引 240
9.8 常見問題及解答 242
疑問1:索引對資料庫性能如此重要,應該如何使用它? 242
疑問2:為什麼儘量使用短索引? 242
9.9 經典習題 242
第10章 視圖 244
10.1 視圖概述 244
10.1.1 視圖的含義 244
10.1.2 視圖的作用 245
10.2 創建視圖 246
10.2.1 創建視圖的語法形式 246
10.2.2 在單表上創建視圖 246
10.2.3 在多表上創建視圖 248
10.3 查看視圖 248
10.3.1 使用pgAdmin圖形化工具查看視圖 248
10.3.2 在views表中查看視圖詳細信息 249
10.4 刪除視圖 250
10.4.1 使用pgAdmin圖形化工具刪除視圖 250
10.4.2 使用SQL語句刪除視圖 251
10.5 綜合案例——視圖套用 252
10.6 常見問題及解答 257
疑問1:在PostgreSQL中,視圖和表的區別以及聯繫是什麼? 257
疑問2:如何修改視圖的屬性? 257
10.7 經典習題 257
第11章 觸發器 258
11.1 什麼是觸發器和觸發器函式 258
11.2 創建觸發器 259
11.3 查看和修改觸發器 260
11.4 觸發器的使用 261
11.5 刪除觸發器 262
11.6 綜合案例——觸發器使用 263
11.7 常見問題及解答 266
疑問1:使用觸發器時應注意什麼問題? 266
疑問2:為什麼要及時刪除不再需要的觸發器 267
11.8 經典習題 267
第12章 事務處理與並發控制 268
12.1 事務管理簡介 268
12.1.1 事務的含義 268
12.1.2 事務的屬性 269
12.1.3 事務塊管理的常用語句 269
12.1.4 事務的套用案例 270
12.2 POSTGRESQL的並發控制 271
12.3 鎖機制 273
12.3.1 鎖的類型 273
12.3.2 死鎖 274
12.4 鎖的套用案例 275
12.5 POSTGRESQL 11的新特性——支持存儲過程 276
12.6 常見問題及解答 279
疑問1:事務和鎖在套用上的區別是什麼? 279
疑問2:事務和鎖有什麼關係? 279
12.7 經典習題 279
第13章 PostgreSQL用戶管理 280
13.1 組角色管理 280
13.1.1 創建組角色 280
13.1.2 查看和修改組角色 282
13.1.3 刪除組角色 284
13.2 角色的各種許可權 286
13.3 賬戶管理 287
13.3.1 創建用戶 287
13.3.2 刪除用戶 290
13.3.3 修改用戶密碼 291
13.4 組角色和用戶許可權管理 292
13.4.1 對組角色授權 292
13.4.2 對用戶授權 293
13.4.3 收回組角色許可權 294
13.4.4 收回用戶許可權 294
13.5 資料庫許可權管理 295
13.5.1 修改資料庫的擁有者 295
13.5.2 增加用戶的數據表許可權 297
13.6 POSTGRESQL 11的新特性1——新增3個默認角色 298
13.7 POSTGRESQL 11的新特性2——下放4個系統函式 299
13.8 綜合案例——綜合管理用戶許可權 300
13.9 常見問題及解答 302
疑問1:如何撤銷用戶對數據表的操作許可權? 302
疑問2:組角色和登錄角色之間的區別是什麼? 302
疑問3:為什麼要謹慎使用超級用戶許可權? 302
13.10 經典習題 302
第14章 數據備份與還原 304
14.1 數據備份 304
14.1.1 使用pgAdmin 4備份資料庫 304
14.1.2 使用pg_dump工具備份資料庫 306
14.1.3 使用pg_dumpall工具備份整個伺服器的資料庫 309
14.2 數據還原 310
14.2.1 使用pgAdmin 4還原資料庫 310
14.2.2 使用psql還原資料庫 311
14.2.3 使用pg_restore快速還原資料庫 313
14.3 資料庫遷移 314
14.3.1 相同版本的PostgreSQL資料庫之間的遷移 314
14.3.2 不同版本的PostgreSQL資料庫之間的遷移 314
14.3.3 不同資料庫之間遷移 314
14.4 綜合案例——數據的備份與恢復 315
14.5 常見問題及解答 315
疑問1:pgdump備份的檔案只能在PostgreSQL中使用嗎? 315
疑問2:使用pgAdmin恢複數據庫時需要注意什麼問題? 316
14.6 經典習題 316
第15章 性能最佳化 317
15.1 最佳化簡介 317
15.2 最佳化查詢 317
15.2.1 分析查詢語句EXPLAIN 318
15.2.2 索引對查詢速度的影響 318
15.2.3 最佳化子查詢 319
15.3 最佳化資料庫結構 320
15.3.1 將欄位很多的表分解成多個表 320
15.3.2 增加中間表 321
15.3.3 增加冗餘欄位 322
15.3.4 最佳化插入記錄的速度 323
15.3.5 分析表的統計信息 323
15.4 最佳化POSTGRESQL伺服器 324
15.4.1 最佳化伺服器硬體 324
15.4.2 最佳化PostgreSQL的參數 325
15.5 POSTGRESQL 11的新特性1——新增5個記錄錯誤的變數 325
15.6 POSTGRESQL 11的新特性2——增加對JIT編譯的支持 326
15.7 POSTGRESQL 11的新特性3——支持並行哈希連線 328
15.8 綜合案例——最佳化POSTGRESQL伺服器 331
15.9 常見問題及解答 332
疑問1:是不是索引建立的越多越好? 332
疑問2:如何更新緩衝區的緩衝? 332
15.10 經典習題 332
第16章 高可用、負載均衡和數據複製 333
16.1 常見的數據同步解決方案 333
16.2 日誌傳送備用伺服器 334
16.2.1 日誌傳送概述 334
16.2.2 設定備用伺服器 335
16.3 數據的流複製 336
16.3.1 流複製概述 336
16.3.2 身份驗證 337
16.4 數據的同步複製 337
16.4.1 同步複製概述 338
16.4.2 同步複製的套用案例 338
16.5 POSTGRESQL 11的新特性1——分區表增加哈希分區 342
16.6 POSTGRESQL 11的新特性2——分區表支持創建主鍵和索引 344
16.7 POSTGRESQL 11的新特性3——分區表支持UPDATE分區鍵 346
16.8 常見問題及解答 347
疑問1:如何監控系統中鎖的情況? 347
疑問2:什麼是數據分區? 348
第17章 伺服器配置與資料庫監控 349
17.1 伺服器配置 349
17.1.1 伺服器配置的檔案 349
17.1.2 連線與認證 351
17.1.3 資源消耗 353
17.1.4 預寫式日誌 355
17.1.5 查詢規劃 355
17.1.6 錯誤報告和日誌 356
17.1.7 運行時統計 358
17.1.8 自動清理 358
17.1.9 客戶端連線默認 359
17.1.10 鎖管理 360
17.1.11 版本和平台兼容性 360
17.2 監控資料庫的活動 360
17.2.1 配置統計收集器 361
17.2.2 查看收集到的統計信息 361
17.3 監控磁碟的使用 364
17.3.1 監控磁碟的使用量 364
17.3.2 磁碟滿導致的失效 366
17.4 綜合實戰——查看監控磁碟的使用情況 367
17.5 常見問題及解答 368
疑問1:當伺服器配置出現衝突時,採用什麼方式的優先權? 368
疑問2:為什麼有時候磁碟沒有寫滿性能仍然很低? 369
第18章 內部結構 370
18.1 POSTGRESQL的內部概述 370
18.1.1 查詢經過的路徑 370
18.1.2 如何建立連線 371
18.1.3 分析器階段 372
18.1.4 PostgreSQL規則系統 372
18.1.5 規劃器/最佳化器 373
18.1.6 執行器 374
18.2 POSTGRESQL的內部系統表 375
18.2.1 數據表 375
18.2.2 系統視圖 380
18.3 POSTGRESQL的內部前端/後端協定 385
18.3.1 概述 385
18.3.2 訊息流 385
18.3.3 訊息數據類型 390
18.3.4 訊息格式 390
18.3.5 錯誤和通知訊息欄位 398
18.4 POSTGRESQL的編碼約定 399
18.4.1 格式 399
18.4.2 報告伺服器里的錯誤 399
18.4.3 錯誤訊息風格指南 401
18.5 基因查詢最佳化器 404
18.5.1 作為複雜最佳化問題的查詢處理 404
18.5.2 基因算法 404
18.5.3 PostgreSQL里的基因查詢最佳化(GEQO) 405
18.6 索引訪問方法接口定義 406
18.6.1 索引的系統表記錄 406
18.6.2 索引訪問方法函式 407
18.6.3 索引掃描 410
18.6.4 索引唯一性檢查 411
18.6.5 索引開銷估計函式 412
18.7 GIST索引 413
18.7.1 GiST簡介 413
18.7.2 GiST的可擴展性 414
18.7.3 實現方法 414
18.8 資料庫物理存儲 415
18.8.1 資料庫檔案布局 415
18.8.2 TOAST 416
18.8.3 資料庫分頁檔案 417
18.9 BKI後端接口 420
18.9.1 BKI檔案格式 420
18.9.2 BKI命令 420
18.9.3 系統初始化的BKI檔案結構 421
18.9.4 例子 422
18.10 常見問題及解答 422
疑問1:什麼是GIN索引? 422
疑問2:使用索引鎖需要注意什麼? 422
3.1.1 使用對象瀏覽器創建資料庫 31
3.1.2 使用SQL創建資料庫 34
3.2 修改資料庫的屬性 35
3.2.1 使用對象瀏覽器修改資料庫的屬性 35
3.2.2 使用SQL語句修改資料庫屬性 36
3.3 刪除資料庫 37
3.3.1 使用對象瀏覽器刪除資料庫 37
3.3.2 使用SQL語句刪除資料庫 38
3.4 綜合案例——資料庫的創建和刪除 39
3.5 常見問題及解答 40
疑問1:如何使用SQL語句創建具有一定條件的資料庫? 40
疑問2:使用DROP語句要注意什麼問題? 40
3.6 經典習題 41
第4章 數據表的基本操作 42
4.1 創建數據表 42
4.1.1 創建數據表 42
4.1.2 使用主鍵約束 47
4.1.3 使用外鍵約束 48
4.1.4 使用非空約束 51
4.1.5 使用唯一性約束 51
4.1.6 使用默認約束 53
4.2 修改數據表 53
4.2.1 修改表名 53
4.2.2 修改欄位的數據類型 54
4.2.3 修改欄位名 55
4.2.4 添加欄位 56
4.2.5 刪除欄位 58
4.2.6 刪除表的外鍵約束 58
4.3 刪除數據表 60
4.3.1 刪除沒有被關聯的表 60
4.3.2 刪除被其他表關聯的主表 61
4.4 POSTGRESQL 11的新特性——新增帶默認值的欄位不再重寫數據表 63
4.5 綜合案例——數據表的基本操作 64
4.6 常見問題及解答 71
疑問1:表刪除和修改操作時需注意什麼問題? 71
疑問2:每一個表中都要有一個主鍵嗎? 71
4.7 經典習題 71
第5章 數據類型和運算符 73
5.1 POSTGRESQL數據類型介紹 73
5.1.1 整數類型 73
5.1.2 浮點數類型 74
5.1.3 任意精度類型 75
5.1.4 日期與時間類型 75
5.1.5 字元串類型 82
5.1.6 二進制類型 84
5.1.7 布爾類型 85
5.1.8 數組類型 85
5.2 如何選擇數據類型 86
5.3 常見運算符介紹 87
5.3.1 運算符概述 87
5.3.2 算術運算符 88
5.3.3 比較運算符 90
5.3.4 邏輯運算符 97
5.3.5 運算符的優先權 99
5.4 綜合案例——運算符的使用 100
5.5 常見問題及解答 102
疑問1:PostgreSQL中可以存儲檔案嗎? 102
疑問2:二進制和普通字元串的區別是什麼? 102
5.6 經典習題 102
第6章 PostgreSQL函式 103
6.1 POSTGRESQL函式簡介 103
6.2 數學函式 103
6.2.1 絕對值函式ABS(x)和返回圓周率的函式PI() 104
6.2.2 平方根函式SQRT(x)和求余函式MOD(x,y) 104
6.2.3 獲取整數的函式CEIL(x)、CEILING(x)和FLOOR(x) 105
6.2.4 四捨五入函式ROUND(x)和ROUND(x,y) 106
6.2.5 符號函式SIGN(x) 107
6.2.6 冪運算函式POW(x,y)、POWER(x,y)和EXP(x) 108
6.2.7 對數運算函式LOG(x) 109
6.2.8 角度與弧度相互轉換的函式RADIANS(x)和DEGREES(x) 109
6.2.9 正弦函式SIN(x)和反正弦函式ASIN(x) 110
6.2.10 餘弦函式COS(x)和反餘弦函式ACOS(x) 111
6.2.11 正切函式、反正切函式和餘切函式 112
6.3 字元串函式 113
6.3.1 計算字元串字元數的函式和字元串長度的函式 113
6.3.2 合併字元串函式CONCAT(s1,s2,…)、CONCAT_WS(x,s1,s2,…) 114
6.3.3 獲取指定長度的字元串的函式LEFT(s,n)和RIGHT(s,n) 115
6.3.4 填充字元串的函式LPAD(s1,len,s2)和RPAD(s1,len,s2) 116
6.3.5 刪除空格的函式LTRIM(s)、RTRIM(s)和TRIM(s) 117
6.3.6 刪除指定字元串的函式TRIM(s1 FROM s) 119
6.3.7 重複生成字元串的函式REPEAT(s,n) 119
6.3.8 替換函式REPLACE(s,s1,s2) 120
6.3.9 獲取子串的函式SUBSTRING(s,n,len) 120
6.3.10 匹配子串開始位置的函式POSITION(str1 IN str) 121
6.3.11 字元串逆序的函式REVERSE(s) 121
6.4 日期和時間函式 122
6.4.1 獲取當前日期的函式和獲取當前時間的函式 122
6.4.2 獲取當前日期和時間的函式 123
6.4.3 獲取日期的指定值的函式EXTRACT(type FROM d) 124
6.4.4 日期和時間的運算操作 126
6.5 條件判斷函式 129
6.6 系統信息函式 130
6.6.1 獲取PostgreSQL版本號 130
6.6.2 獲取用戶名的函式 131
6.7 加密函式 131
6.7.1 加密函式MD5(str) 131
6.7.2 加密函式ENCODE(str,pswd_str) 132
6.7.3 解密函式DECODE(crypt_str,pswd_str) 132
6.8 改變數據類型的函式 133
6.9 綜合案例——POSTGRESQL函式的使用 133
6.10 常見問題及解答 137
疑問1:如何從日期時間值中獲取年、月、日等部分日期或時間值? 137
疑問2:如何計算年齡? 137
6.11 經典習題 137
第7章 插入、更新與刪除數據 139
7.1 插入數據 139
7.1.1 為表的所有欄位插入數據 139
7.1.2 為表的指定欄位插入數據 142
7.1.3 同時插入多條記錄 143
7.1.4 將查詢結果插入到表中 145
7.2 更新數據 147
7.3 刪除數據 149
7.4 綜合案例——記錄的插入、更新和刪除 152
7.5 常見問題及解答 158
疑問1:插入記錄時可以不指定欄位名稱嗎? 158
疑問2:更新或者刪除表時必須指定WHERE子句嗎? 158
7.6 經典習題 158
第8章 查詢數據 160
8.1 基本查詢語句 160
8.2 單表查詢 162
8.2.1 查詢所有欄位 163
8.2.2 查詢指定欄位 164
8.2.3 查詢指定記錄 166
8.2.4 帶IN關鍵字的查詢 168
8.2.5 帶BETWEEN AND的範圍查詢 170
8.2.6 帶LIKE的字元匹配查詢 171
8.2.7 查詢空值 172
8.2.8 帶AND的多條件查詢 174
8.2.9 帶OR的多條件查詢 175
8.2.10 查詢結果不重複 176
8.2.11 對查詢結果排序 177
8.2.12 分組查詢 180
8.2.13 用LIMIT限制查詢結果的數量 182
8.3 使用集合函式查詢 184
8.3.1 COUNT()函式 184
8.3.2 SUM()函式 186
8.3.3 AVG()函式 187
8.3.4 MAX()函式 188
8.3.5 MIN()函式 190
8.4 連線查詢 191
8.4.1 內連線查詢 191
8.4.2 外連線查詢 194
8.4.3 複合條件連線查詢 196
8.5 子查詢 198
8.5.1 帶ANY、SOME關鍵字的子查詢 198
8.5.2 帶ALL關鍵字的子查詢 199
8.5.3 帶EXISTS關鍵字的子查詢 199
8.5.4 帶IN關鍵字的子查詢 201
8.5.5 帶比較運算符的子查詢 203
8.6 合併查詢結果 205
8.7 為表和欄位取別名 208
8.7.1 為表取別名 208
8.7.2 為欄位取別名 210
8.8 使用正則表達式查詢 212
8.8.1 查詢以特定字元或字元串開頭的記錄 213
8.8.2 查詢以特定字元或字元串結尾的記錄 213
8.8.3 用符號"".""來替代字元串中的任意一個字元 214
8.8.4 使用""*""和""+""來匹配多個字元 215
8.8.5 匹配指定字元串 216
8.8.6 匹配指定字元中的任意一個 217
8.8.7 匹配指定字元以外的字元 218
8.8.8 使用{M}或者{M,N}來指定字元串連續出現的次數 219
8.9 POSTGRESQL 11新特性——PSQL新增GDESC選項 220
8.10 綜合案例——數據表查詢操作 220
8.11 常見問題及解答 228
疑問1:DISTINCT可以套用於所有的列嗎? 228
疑問2:ORDER BY可以和LIMIT混合使用嗎? 229
疑問3:什麼時候使用單引號? 229
疑問4:在WHERE子句中必須使用圓括弧嗎? 229
疑問5:為什麼使用通配符格式正確,卻沒有查找出符合條件的記錄? 229
8.12 經典習題 229
第9章 索引 230
9.1 索引簡介 230
9.1.1 索引的含義和特點 230
9.1.2 索引的分類 231
9.1.3 索引的設計原則 232
9.2 創建索引 232
9.2.1 使用pgAdmin創建索引 232
9.2.2 使用SQL語句創建索引 233
9.3 重命名索引 236
9.4 刪除索引 237
9.5 POSTGRESQL 11的新特性1 ——創建索引時支持INCLUDE方式 238
9.6 POSTGRESQL 11的新特性2——執行並行創建索引 239
9.7 綜合案例——創建索引 240
9.8 常見問題及解答 242
疑問1:索引對資料庫性能如此重要,應該如何使用它? 242
疑問2:為什麼儘量使用短索引? 242
9.9 經典習題 242
第10章 視圖 244
10.1 視圖概述 244
10.1.1 視圖的含義 244
10.1.2 視圖的作用 245
10.2 創建視圖 246
10.2.1 創建視圖的語法形式 246
10.2.2 在單表上創建視圖 246
10.2.3 在多表上創建視圖 248
10.3 查看視圖 248
10.3.1 使用pgAdmin圖形化工具查看視圖 248
10.3.2 在views表中查看視圖詳細信息 249
10.4 刪除視圖 250
10.4.1 使用pgAdmin圖形化工具刪除視圖 250
10.4.2 使用SQL語句刪除視圖 251
10.5 綜合案例——視圖套用 252
10.6 常見問題及解答 257
疑問1:在PostgreSQL中,視圖和表的區別以及聯繫是什麼? 257
疑問2:如何修改視圖的屬性? 257
10.7 經典習題 257
第11章 觸發器 258
11.1 什麼是觸發器和觸發器函式 258
11.2 創建觸發器 259
11.3 查看和修改觸發器 260
11.4 觸發器的使用 261
11.5 刪除觸發器 262
11.6 綜合案例——觸發器使用 263
11.7 常見問題及解答 266
疑問1:使用觸發器時應注意什麼問題? 266
疑問2:為什麼要及時刪除不再需要的觸發器 267
11.8 經典習題 267
第12章 事務處理與並發控制 268
12.1 事務管理簡介 268
12.1.1 事務的含義 268
12.1.2 事務的屬性 269
12.1.3 事務塊管理的常用語句 269
12.1.4 事務的套用案例 270
12.2 POSTGRESQL的並發控制 271
12.3 鎖機制 273
12.3.1 鎖的類型 273
12.3.2 死鎖 274
12.4 鎖的套用案例 275
12.5 POSTGRESQL 11的新特性——支持存儲過程 276
12.6 常見問題及解答 279
疑問1:事務和鎖在套用上的區別是什麼? 279
疑問2:事務和鎖有什麼關係? 279
12.7 經典習題 279
第13章 PostgreSQL用戶管理 280
13.1 組角色管理 280
13.1.1 創建組角色 280
13.1.2 查看和修改組角色 282
13.1.3 刪除組角色 284
13.2 角色的各種許可權 286
13.3 賬戶管理 287
13.3.1 創建用戶 287
13.3.2 刪除用戶 290
13.3.3 修改用戶密碼 291
13.4 組角色和用戶許可權管理 292
13.4.1 對組角色授權 292
13.4.2 對用戶授權 293
13.4.3 收回組角色許可權 294
13.4.4 收回用戶許可權 294
13.5 資料庫許可權管理 295
13.5.1 修改資料庫的擁有者 295
13.5.2 增加用戶的數據表許可權 297
13.6 POSTGRESQL 11的新特性1——新增3個默認角色 298
13.7 POSTGRESQL 11的新特性2——下放4個系統函式 299
13.8 綜合案例——綜合管理用戶許可權 300
13.9 常見問題及解答 302
疑問1:如何撤銷用戶對數據表的操作許可權? 302
疑問2:組角色和登錄角色之間的區別是什麼? 302
疑問3:為什麼要謹慎使用超級用戶許可權? 302
13.10 經典習題 302
第14章 數據備份與還原 304
14.1 數據備份 304
14.1.1 使用pgAdmin 4備份資料庫 304
14.1.2 使用pg_dump工具備份資料庫 306
14.1.3 使用pg_dumpall工具備份整個伺服器的資料庫 309
14.2 數據還原 310
14.2.1 使用pgAdmin 4還原資料庫 310
14.2.2 使用psql還原資料庫 311
14.2.3 使用pg_restore快速還原資料庫 313
14.3 資料庫遷移 314
14.3.1 相同版本的PostgreSQL資料庫之間的遷移 314
14.3.2 不同版本的PostgreSQL資料庫之間的遷移 314
14.3.3 不同資料庫之間遷移 314
14.4 綜合案例——數據的備份與恢復 315
14.5 常見問題及解答 315
疑問1:pgdump備份的檔案只能在PostgreSQL中使用嗎? 315
疑問2:使用pgAdmin恢複數據庫時需要注意什麼問題? 316
14.6 經典習題 316
第15章 性能最佳化 317
15.1 最佳化簡介 317
15.2 最佳化查詢 317
15.2.1 分析查詢語句EXPLAIN 318
15.2.2 索引對查詢速度的影響 318
15.2.3 最佳化子查詢 319
15.3 最佳化資料庫結構 320
15.3.1 將欄位很多的表分解成多個表 320
15.3.2 增加中間表 321
15.3.3 增加冗餘欄位 322
15.3.4 最佳化插入記錄的速度 323
15.3.5 分析表的統計信息 323
15.4 最佳化POSTGRESQL伺服器 324
15.4.1 最佳化伺服器硬體 324
15.4.2 最佳化PostgreSQL的參數 325
15.5 POSTGRESQL 11的新特性1——新增5個記錄錯誤的變數 325
15.6 POSTGRESQL 11的新特性2——增加對JIT編譯的支持 326
15.7 POSTGRESQL 11的新特性3——支持並行哈希連線 328
15.8 綜合案例——最佳化POSTGRESQL伺服器 331
15.9 常見問題及解答 332
疑問1:是不是索引建立的越多越好? 332
疑問2:如何更新緩衝區的緩衝? 332
15.10 經典習題 332
第16章 高可用、負載均衡和數據複製 333
16.1 常見的數據同步解決方案 333
16.2 日誌傳送備用伺服器 334
16.2.1 日誌傳送概述 334
16.2.2 設定備用伺服器 335
16.3 數據的流複製 336
16.3.1 流複製概述 336
16.3.2 身份驗證 337
16.4 數據的同步複製 337
16.4.1 同步複製概述 338
16.4.2 同步複製的套用案例 338
16.5 POSTGRESQL 11的新特性1——分區表增加哈希分區 342
16.6 POSTGRESQL 11的新特性2——分區表支持創建主鍵和索引 344
16.7 POSTGRESQL 11的新特性3——分區表支持UPDATE分區鍵 346
16.8 常見問題及解答 347
疑問1:如何監控系統中鎖的情況? 347
疑問2:什麼是數據分區? 348
第17章 伺服器配置與資料庫監控 349
17.1 伺服器配置 349
17.1.1 伺服器配置的檔案 349
17.1.2 連線與認證 351
17.1.3 資源消耗 353
17.1.4 預寫式日誌 355
17.1.5 查詢規劃 355
17.1.6 錯誤報告和日誌 356
17.1.7 運行時統計 358
17.1.8 自動清理 358
17.1.9 客戶端連線默認 359
17.1.10 鎖管理 360
17.1.11 版本和平台兼容性 360
17.2 監控資料庫的活動 360
17.2.1 配置統計收集器 361
17.2.2 查看收集到的統計信息 361
17.3 監控磁碟的使用 364
17.3.1 監控磁碟的使用量 364
17.3.2 磁碟滿導致的失效 366
17.4 綜合實戰——查看監控磁碟的使用情況 367
17.5 常見問題及解答 368
疑問1:當伺服器配置出現衝突時,採用什麼方式的優先權? 368
疑問2:為什麼有時候磁碟沒有寫滿性能仍然很低? 369
第18章 內部結構 370
18.1 POSTGRESQL的內部概述 370
18.1.1 查詢經過的路徑 370
18.1.2 如何建立連線 371
18.1.3 分析器階段 372
18.1.4 PostgreSQL規則系統 372
18.1.5 規劃器/最佳化器 373
18.1.6 執行器 374
18.2 POSTGRESQL的內部系統表 375
18.2.1 數據表 375
18.2.2 系統視圖 380
18.3 POSTGRESQL的內部前端/後端協定 385
18.3.1 概述 385
18.3.2 訊息流 385
18.3.3 訊息數據類型 390
18.3.4 訊息格式 390
18.3.5 錯誤和通知訊息欄位 398
18.4 POSTGRESQL的編碼約定 399
18.4.1 格式 399
18.4.2 報告伺服器里的錯誤 399
18.4.3 錯誤訊息風格指南 401
18.5 基因查詢最佳化器 404
18.5.1 作為複雜最佳化問題的查詢處理 404
18.5.2 基因算法 404
18.5.3 PostgreSQL里的基因查詢最佳化(GEQO) 405
18.6 索引訪問方法接口定義 406
18.6.1 索引的系統表記錄 406
18.6.2 索引訪問方法函式 407
18.6.3 索引掃描 410
18.6.4 索引唯一性檢查 411
18.6.5 索引開銷估計函式 412
18.7 GIST索引 413
18.7.1 GiST簡介 413
18.7.2 GiST的可擴展性 414
18.7.3 實現方法 414
18.8 資料庫物理存儲 415
18.8.1 資料庫檔案布局 415
18.8.2 TOAST 416
18.8.3 資料庫分頁檔案 417
18.9 BKI後端接口 420
18.9.1 BKI檔案格式 420
18.9.2 BKI命令 420
18.9.3 系統初始化的BKI檔案結構 421
18.9.4 例子 422
18.10 常見問題及解答 422
疑問1:什麼是GIN索引? 422
疑問2:使用索引鎖需要注意什麼? 422

相關詞條

熱門詞條

聯絡我們