基 础 篇, W, J! B9 x$ t3 ^6 w
第1章 安装与配置基础2- d' U( _& b" m7 Y* k6 N; M! t5 S3 G
1.1 初识PostgreSQL2) t5 Q/ h1 L+ R' ~
1.1.1 PostgreSQL的特点3
" i) L0 g( m! ]. a! e7 j$ c' p2 i& S \1.1.2 许可3& m n9 K" x# m$ k# `6 _6 ~
1.1.3 邮件列表和讨论区3( r. M% C" C7 {: z) s$ S
1.2 安装PostgreSQL3
$ e" r8 U, Z; E* N* C3 Y2 W1.2.1 通过yum源安装4
& P; M; B4 `. N" n2 Y1.2.2 通过源码编译安装5& m! k; f6 h2 ?* n
1.2.3 设置一个软链接7$ l4 |1 Y) U: [ Q T: _
1.3 客户端程序和服务器程序81 \4 G* m% }* B0 c' m
1.3.1 客户端程序8
4 g" c; Z; c: Y1 l. `1.3.2 服务器程序11
6 T0 }0 }* J* _& ?3 F( ?- w3 l0 k# m1.4 创建数据库实例119 s7 r# {! x0 z* {6 }! G* E; H
1.4.1 创建操作系统用户11: e3 K% G% U! s9 h
1.4.2 创建数据目录12" O( R7 h+ M6 [6 S+ Q
1.4.3 初始化数据目录13; d: f- G! q) P& N S8 d
1.5 启动和停止数据库服务器146 Q0 D! y6 h, m R/ O
1.5.1 使用service方式15
& _+ O$ B, F# T k m Z) r& k( x/ j; t1.5.2 使用pg_ctl进行管理15
+ p ~: M# V# u, \1.5.3 其他启动和关闭数据库服务器的方式16
5 ?, n% a9 J# h1.5.4 配置开机启动16, a8 X) s. y8 _3 [% v7 I4 ?0 j6 Y
1.6 数据库配置基础17
8 H, W' ?# u2 b1 y1.6.1 配置文件的位置17
* X, a+ k5 r8 T! ~! X( b1.6.2 pg_hba.conf17' I8 o e3 H8 s
1.6.3 postgresql.conf19/ r, x& @1 k$ E0 B5 z" k
1.6.4 允许远程访问数据库20
$ | V4 K0 N' w9 D7 g0 l# l6 A& K1.7 本章小结22+ C1 K8 \' S' E* p6 H) w& A
第2章 客户端工具23
- n1 y3 ^, A0 ]2 C7 c5 M2.1 pgAdmin 4简介23/ }% ]0 x* C) l# e* P9 o
2.1.1 pgAdmin 4 安装23
( K6 J4 m! r8 Q T2.1.2 pgAdmin 4 使用23
0 C& J) }' h$ B( w* V/ \8 Q2.2 psql功能及应用26
6 l! z" ^9 ^8 I$ I* B- R4 h1 q2.2.1 使用psql连接数据库26! y- {2 Y1 E! W$ V# t
2.2.2 psql元命令介绍28% \) y! _& h7 F; m+ q$ p0 H3 Z
2.2.3 psql导入、导出表数据31! i- e, }/ p9 G, b8 x& o
2.2.4 psql的语法和选项介绍34
' B7 E% X5 H- \- a& [5 ~8 D2.2.5 psql执行sql脚本36: W- M/ ?* D. u8 i5 o- a9 ^
2.2.6 psql如何传递变量到SQL37
8 `0 b% d! k9 A: B2.2.7 使用psql定制日常维护脚本386 S( v l1 c' _0 r- `
2.2.8 psql亮点功能394 I0 Y; b, B9 `7 h4 C y
2.3 本章小结43# `: ?( c P" G0 p6 H' ~
第3章 数据类型445 Q, M) e. x# [3 c+ r
3.1 数字类型442 X. j4 Z. D' ]% b$ `2 w
3.1.1 数字类型列表44
- d; t: p4 B% B; |0 F- W" m3.1.2 数字类型操作符和数学函数46
+ Q! `% b( [/ I9 x& z3 ^3.2 字符类型47: _ p8 w1 e. v7 D" e7 k: I1 {- u Z
3.2.1 字符类型列表47
! D1 [- J3 S1 |3.2.2 字符类型函数48
9 _. Z3 Y# ^$ `: M/ _! r# Y* l: Z* x# S3.3 时间/日期类型494 C/ @1 U$ O8 T
3.3.1 时间/日期类型列表49% o% H" c& r& R
3.3.2 时间/日期类型操作符50
- N8 @' [# P4 W/ } f3.3.3 时间/日期类型常用函数51& H4 x9 Z5 g3 K5 i
3.4 布尔类型523 h9 ^5 w& c0 H5 l$ ]# d! d
3.5 网络地址类型53/ W6 `, z, _1 Q1 \1 \
3.5.1 网络地址类型列表54
0 i5 ]$ H, @9 D3.5.2 网络地址操作符559 q. h! e9 q& F
3.5.3 网络地址函数56
: H8 ^2 f! n6 P3 S7 ~( E! M$ o! Z5 P# ~3.6 数组类型56
3 A6 S/ V5 H- k5 m7 X2 v" h3.6.1 数组类型定义560 Q* p+ ?8 m, W! K
3.6.2 数组类型值输入56
# v @5 {$ a+ I" o6 r3.6.3 查询数组元素57
W9 j8 J `! {& D+ j" r3.6.4 数组元素的追加、删除、更新58, Z f" n8 @+ \1 h0 V
3.6.5 数组操作符58
, r; U$ d" _, ^7 l: g' i6 h3.6.6 数组函数59
! t3 l/ ~- c$ n' C7 j# |) ]! f1 N3.7 范围类型60' E0 m& `: z; O
3.7.1 范围类型列表60
6 {- U' l: S' i' `2 H4 n3.7.2 范围类型边界619 Z1 I1 s: m( `3 }) G
3.7.3 范围类型操作符62
9 _! G+ }! y5 ]! D+ E- n3.7.4 范围类型函数62
% K. P( H% H- T2 x7 \3.7.5 给范围类型创建索引63
( y8 T3 d/ {. T5 L0 B3.8 json/jsonb类型63
& w4 I. F! M; V9 S7 u' l2 T6 n4 v3.8.1 json类型简介63
, e9 R! U7 M8 ^6 r/ ` j% \7 ]' s3.8.2 查询json数据64
! \$ m( j6 ?4 O' Z0 R4 L% M3.8.3 jsonb与json差异64 ^/ q* w! y* c2 P: K8 O
3.8.4 jsonb与json操作符652 A# `/ {7 ]- M4 y( I
3.8.5 jsonb与json函数66
, t4 G9 L& u6 g& H3.8.6 jsonb键/值的追加、删除、更新66
1 O: [# Y N: y- b3.9 数据类型转换68
# n# I$ b" O5 ~$ w+ [3.9.1 通过格式化函数进行转换68
5 w+ ~6 u) q6 B o! g3.9.2 通过CAST函数进行转换68) }( F$ n' p" c2 c! N6 M
3.9.3 通过::操作符进行转换69
7 z! {: r( O$ [* W0 F3.10 本章小结70
( a! }+ ~5 C% G* E+ w* w' s( c2 S第4章 SQL高级特性711 v c+ C3 @# s. G7 ]
4.1 WITH查询71. a# b9 \& H% u3 D4 M6 C7 `- ]6 r
4.1.1 复杂查询使用CTE71
" _* }/ ~( Z% v; U8 ? J4.1.2 递归查询使用CTE72
9 z3 I+ h! d, {1 F" O9 }1 U4.2 批量插入74
! ]7 |# }9 X8 M, F8 {( G4.2.1 方式一:INSERT INTO...SELECT...74
; N- J/ J5 f v1 C l7 Q4.2.2 方式二:INSERT INTO VALUES (),(),...()755 U3 V; I( y. N& c2 h$ J1 Q
4.2.3 方式三:COPY或\COPY元命令75
9 J& F& m' k+ u$ B! z4.3 RETURNING返回修改的数据76
% [$ j. J3 w9 |. J# L4.3.1 RETURNING返回插入的数据76
: n% x, R. Y! w* t4.3.2 RETURNING返回更新后数据77
, X6 M; X3 {7 f8 o4.3.3 RETURNING返回删除的数据77% ?/ ?2 a/ J6 k& Q* J3 }! [) n+ |
4.4 UPSERT78" d1 p' G9 {* [) A
4.4.1 UPSERT场景演示78
* O7 \0 O5 q4 f0 |; ]4.4.2 UPSERT语法79
% T/ z8 Q! ], }# D" ^ P" N4.5 数据抽样80
) E1 ~) G7 ?3 Y5 A0 b2 x4.5.1 SYSTEM抽样方式81* I. Z& d$ J+ j$ k2 Z$ w5 G) L
4.5.2 BERNOULLI抽样方式82
; _% u* @9 r' k% I% w4.6 聚合函数84) f) l: P- j$ `
4.6.1 string_agg函数84
- S; u: R7 x% o8 R6 n" ~4.6.2 array_agg函数85! M+ {9 S, A T' p. |; j; t9 c
4.7 窗口函数86
& E6 k! z5 @. G- N# R5 A; z4.7.1 窗口函数语法86$ F* G( h* i- y% c- O
4.7.2 avg() OVER()871 T4 l' h/ n( S1 g
4.7.3 row_number()88: ~$ ^! Z$ l) T- I2 s
4.7.4 rank()89
1 Q6 ^2 A) {5 I6 f) O4.7.5 dense_rank ()89
1 `; G; c M3 \4.7.6 lag()90 V- w: u; n" R2 {
4.7.7 first_value ()91: |" C& A1 k# ]3 g3 _
4.7.8 last_value ()91
* A% e0 S& ?2 \; O& j: U4 ]& M4.7.9 nth_value ()92
' [) P, L& v W. _" U4.7.10 窗口函数别名的使用92: y) |" ?+ S* x2 P( b0 A2 S
4.8 本章小结931 t9 O; `2 f5 X6 W; {0 v
核 心 篇0 s, Q* a$ Z4 Y4 \
第5章 体系结构96; ^+ n9 a Z- l# S; g6 f3 f5 V
5.1 逻辑和物理存储结构96+ t% D- f2 g P2 W5 C7 `/ m: I
5.1.1 逻辑存储结构96! @$ [- y. f# n
5.1.2 物理存储结构97
% |. g! K9 D, e+ \5.2 进程结构105
$ B! I% W; a/ s0 q" }5.2.1 守护进程与服务进程105
6 a- B$ r- B# w! @+ E5.2.2 辅助进程105
; d) {/ u |: f# _% x* y2 g& W5.3 内存结构106
* V% Q/ w4 ^% B s. L/ x0 u+ ~5.3.1 本地内存106% S7 w1 ~$ F/ N" c
5.3.2 共享内存107* t* m9 b4 o) C2 @! c, X# z
5.4 本章小结1074 p( d( c! Z2 V% o2 |* ]
第6章 并行查询1094 c9 |2 m9 o: Y7 I
6.1 并行查询相关配置参数109& X4 z. w4 P8 @! a6 C
6.2 并行扫描111. N2 G& u. n/ P$ ~. T; P: P# c
6.2.1 并行顺序扫描1119 B. E3 k. O8 L( O7 l
6.2.2 并行索引扫描112! T# D$ w" ]5 U- \& _" J" M
6.2.3 并行index-only扫描1146 n M2 {& p7 O" U
6.2.4 并行bitmap heap扫描115- m- D7 [7 z, o6 S+ @, [ N' i8 ?
6.3 并行聚合117, j- ~. n/ u9 ]9 B2 N8 J H% J
6.4 多表关联119
" _' p& ]2 i9 k1 ~3 ~
java8.com
9 M" K* X- @3 y' `6.4.1 Nested loop多表关联120; l. G. [& H. H2 S N
6.4.2 Merge join多表关联1211 F$ k2 o$ X* [
6.4.3 Hash join多表关联1220 Q2 K- o, t, i
6.5 本章小结124: q9 b: E; ?+ H, ]3 O! O9 x( M
第7章 事务与并发控制125
8 ?: _$ e3 W1 `7.1 事务和并发控制的概念125
1 a X; U) H+ r! j% p( }7.1.1 事务的基本概念和性质125& J- @; ?& B4 b9 ~, Z7 ^
7.1.2 并发引发的现象126: X3 W& Q* c& @- X$ |$ q: b2 D
7.1.3 ANSI SQL标准的事务隔离级别129
/ w6 H) y: o' p( E% o: ^7.2 PostgreSQL的事务隔离级别130
8 }0 t, c' @* C7.2.1 查看和设置数据库的事务隔离级别1314 C1 {. q! Q" p. F
7.2.2 修改全局的事务隔离级别132/ }$ B i- [' W5 h% q" K
7.2.3 查看当前会话的事务隔离级别132
5 y( N) o" U; v5 x- d* S) w7.2.4 设置当前会话的事务隔离级别132
: b N- H8 C& \8 D* h$ E# V4 ~* h7.2.5 设置当前事务的事务隔离级别133
$ m. D# K7 Z5 D# [7 W" p7.3 PostgreSQL的并发控制133
" N: u7 u5 y; h$ F q. h1 U2 ~7.3.1 基于锁的并发控制134( h W. ~6 {! ?" Z* o0 O5 F W- W, e
7.3.2 基于多版本的并发控制134
& e! |" X9 ?& `4 ~1 X7 K7.3.3 通过pageinspect观察MVCC137) A$ A2 L9 a% f6 U
7.3.4 使用pg_repack解决表膨胀问题1406 x0 g$ T. Y4 o8 I e8 M n
7.3.5 支持事务的DDL140! L3 W- q9 O2 j" W
7.4 本章小结141. g s# @4 R) d3 P9 S. f. l
第8章 分区表142) M# w3 U1 P2 p' G0 ?- l3 o
8.1 分区表的
% m4 }1 R! q; s
{1 |3 q9 H1 P4 L0 P& o