基 础 篇
7 U% ]1 u5 D! {4 I* O$ {# q第1章 安装与配置基础2
$ ]' o/ t1 ?4 E3 V6 ]8 P1.1 初识PostgreSQL2
5 T7 D( W8 X5 y3 ~. R, P1.1.1 PostgreSQL的特点3
: N2 M. j U* t( n5 l! {/ D1.1.2 许可37 Z8 j# i$ G4 y; s5 q
1.1.3 邮件列表和讨论区3
- e% h$ G; c) b$ i6 z% ]1.2 安装PostgreSQL3; G+ C. ]9 m! h9 H3 f
1.2.1 通过yum源安装4
0 z' E! o" T3 Z9 c1.2.2 通过源码编译安装5. l: V! L0 T H
1.2.3 设置一个软链接7$ F7 B" e/ p: y3 H6 e
1.3 客户端程序和服务器程序8- v# C( ^6 ?8 h6 A8 q0 S
1.3.1 客户端程序8: u$ }3 @7 r- q$ ?- S& n3 h$ v* \
1.3.2 服务器程序11
3 ^0 A4 T" C$ l4 x8 L! W6 F1.4 创建数据库实例11
/ s+ C: w7 f$ P. W! k1.4.1 创建操作系统用户115 g, {2 b: [( m
1.4.2 创建数据目录12
1 H6 P9 H# ~1 D7 M! X0 K# T1.4.3 初始化数据目录13
. p# B4 G. u' L0 g- n0 M2 b1.5 启动和停止数据库服务器14, C8 D, J# f8 f% p1 e
1.5.1 使用service方式15
" U: q( o* h |8 V/ S( T1 l! d! B1.5.2 使用pg_ctl进行管理15. N' C4 ~# p# S( v
1.5.3 其他启动和关闭数据库服务器的方式16
8 L6 a6 s6 D, d8 _1.5.4 配置开机启动16
* J5 Z" _+ Q% |6 U$ `1.6 数据库配置基础17& ^' Z9 y2 Z7 [6 w, y8 T! Y
1.6.1 配置文件的位置17
( O9 s0 E+ V7 [9 d5 L, Z0 i$ E1.6.2 pg_hba.conf17
4 M' }9 p) G, R2 T6 D' {1 ?+ B2 f1.6.3 postgresql.conf194 _9 L8 F4 g& u' V8 }9 C; Y# ~# H
1.6.4 允许远程访问数据库202 b: j5 N- }+ }; v8 V7 n
1.7 本章小结22
9 `8 A; Q3 t! e. G4 s第2章 客户端工具23
9 d5 m( h' i2 k2.1 pgAdmin 4简介23: |1 E2 H: Q4 m5 i( I# L9 _
2.1.1 pgAdmin 4 安装23
O) a3 g+ E6 v6 O/ X1 Q3 \! ?2.1.2 pgAdmin 4 使用23* h' K& a: o$ J5 ^0 x# b
2.2 psql功能及应用268 x, o% }8 t9 w2 u% c1 ~
2.2.1 使用psql连接数据库26
6 y, { j$ W% u/ I8 w8 |5 z/ v" ?2.2.2 psql元命令介绍28; A9 L/ M2 {) K9 u& o' u" G
2.2.3 psql导入、导出表数据31
; y' J$ A& y+ z2.2.4 psql的语法和选项介绍34
& E: K9 P" r2 Z- H6 }" O' i+ ^5 `2.2.5 psql执行sql脚本367 {5 I- n" B% t
2.2.6 psql如何传递变量到SQL37
& C8 E2 l' Q8 P# x; J2.2.7 使用psql定制日常维护脚本38
. d" J$ S$ S7 x' V2.2.8 psql亮点功能39
; V2 W. X; O3 T. Y8 Y) ?2.3 本章小结43
4 O% s5 ?) e4 e5 j* @+ ~9 R第3章 数据类型44
4 ^4 U. f8 V3 k5 F3.1 数字类型44
& H7 N. l9 [: t3.1.1 数字类型列表44
/ {4 R: P2 [- y. j. ^3.1.2 数字类型操作符和数学函数462 }2 `9 U* ?5 h) L9 _9 ^
3.2 字符类型47
$ \4 N- c* d; y' k, t7 m% e3.2.1 字符类型列表47
" k3 V+ k8 d! k3 v0 z2 E% a4 J* }3.2.2 字符类型函数48. W9 s# }- T( S" Q; Z) H
3.3 时间/日期类型497 Q# V t9 K( f0 |
3.3.1 时间/日期类型列表49
A0 d* a$ l6 a1 k* o4 d3.3.2 时间/日期类型操作符50! A! o4 ]6 y+ P! ~8 V% {8 k% w
3.3.3 时间/日期类型常用函数518 ]; m! ~5 t1 c, n7 o9 ^
3.4 布尔类型52* v# L. x% [. C, v) o8 j
3.5 网络地址类型53/ r( ^5 B, O" R) q# I) k
3.5.1 网络地址类型列表54: W+ u m! }$ t/ L0 A
3.5.2 网络地址操作符55: [- I8 e. ?' T/ V. Z- J
3.5.3 网络地址函数56
! w$ C: b3 D( L: }2 I1 G8 b' A, x: h* p3.6 数组类型56
; n& W b1 I4 A3.6.1 数组类型定义56+ t" w( R# Q. _9 w+ ^- c0 v
3.6.2 数组类型值输入56
& N* N8 e2 W# P3.6.3 查询数组元素572 r" @ E1 E6 @0 e& o3 f; E
3.6.4 数组元素的追加、删除、更新581 G* U8 w. V# R w% V5 t
3.6.5 数组操作符58
y% z8 D g7 P) ^2 V" e! n3.6.6 数组函数595 e, n) d9 \7 @/ |4 J
3.7 范围类型60- g. X: A; _5 W: _
3.7.1 范围类型列表607 A2 t2 |2 p) p* [* D' _: e
3.7.2 范围类型边界61
- q% o7 l* G6 b' [$ e3.7.3 范围类型操作符62
: N$ d0 e" P$ t& ~3.7.4 范围类型函数62
, W5 [$ |. _' v) Z3.7.5 给范围类型创建索引63
) ?; s$ t! [' K2 Z% w3.8 json/jsonb类型63
8 i) E! q, l* a. {7 {3.8.1 json类型简介63
& H: x! A0 N6 }2 L T" `/ N+ o3.8.2 查询json数据64
4 z' W$ p/ C' c' @: F, O/ l5 [3.8.3 jsonb与json差异64. W9 Q+ l$ p8 P/ {
3.8.4 jsonb与json操作符65
8 z) V5 x- h5 h( j( }2 F3.8.5 jsonb与json函数66# l7 d1 |7 a$ i! H! s
3.8.6 jsonb键/值的追加、删除、更新666 d' b4 i' ?/ b, g ]
3.9 数据类型转换68& k( O* f9 X, u4 h# z& X
3.9.1 通过格式化函数进行转换687 p/ }4 _1 U% N- ]
3.9.2 通过CAST函数进行转换68) C9 g9 B& `* Q8 Q% U2 `6 Q
3.9.3 通过::操作符进行转换695 Q& ?* V+ H2 _) d6 Q* ]
3.10 本章小结70, V0 I+ y# }8 L9 z1 {5 ~% {3 ?- h" j3 o* A
第4章 SQL高级特性71
/ D8 x! L+ \3 d9 P' G7 B. u" R; b4.1 WITH查询71& T9 q$ d) I2 Y" f5 ]& U4 s3 a) s
4.1.1 复杂查询使用CTE716 {" }0 w8 ], [" h6 Y7 M
4.1.2 递归查询使用CTE726 F3 U( p \" B7 I
4.2 批量插入74
, X) Z1 ^0 M# B9 V! F3 T4.2.1 方式一:INSERT INTO...SELECT...74
9 E1 J4 U N* \4.2.2 方式二:INSERT INTO VALUES (),(),...()75
2 S# G8 p* c* o! N* h- Z: x/ q4.2.3 方式三:COPY或\COPY元命令75
% D- A- n. i+ B9 T- O9 H4.3 RETURNING返回修改的数据76! U/ {7 m* n7 F6 \, {/ p
4.3.1 RETURNING返回插入的数据76
. A- H* }1 b2 k( `4.3.2 RETURNING返回更新后数据77
( r" }3 j2 W, @) p4.3.3 RETURNING返回删除的数据77
7 P6 S* G9 w+ p9 i: H- P/ h0 J& K4 i4.4 UPSERT78
O' f) @! Z7 k4.4.1 UPSERT场景演示78
5 u# s$ _* x! U% d& Q9 t4.4.2 UPSERT语法79
M" n. g. b y4.5 数据抽样80
( B, ]( j6 m2 I% U5 |4 q- e4.5.1 SYSTEM抽样方式81
9 ~/ E1 |0 c" Z/ ~7 \4.5.2 BERNOULLI抽样方式826 {0 ]8 c6 U7 k, o' f/ {: I7 D* B
4.6 聚合函数844 p% }. V5 H' c: K
4.6.1 string_agg函数848 z1 _, N8 O' F% F6 H! C
4.6.2 array_agg函数85
. x& k# K; d9 n; C& r4.7 窗口函数86
1 I& n2 w# }# i6 m4.7.1 窗口函数语法86 i5 k% P, u: a! k% y1 \
4.7.2 avg() OVER()87
, u3 _& N4 K- x: l, g4.7.3 row_number()88- ?8 V; U; o: l5 i2 O/ K
4.7.4 rank()89
- R5 U2 n7 O- W4.7.5 dense_rank ()89
0 U' ?# ?3 l0 u9 v" t$ W3 Q1 T4.7.6 lag()909 _. S% M' _: r
4.7.7 first_value ()91
2 Z) l" X) o" ~& f' Q! k4.7.8 last_value ()91
V3 s: c0 Y0 s" V2 G- F4.7.9 nth_value ()92
+ @/ G# W9 N! t- ]) C6 t D4.7.10 窗口函数别名的使用92. r9 A, |8 Z! X& t/ H" i$ Q
4.8 本章小结93
; W1 V' r. G* ?8 t/ }9 R核 心 篇
. y8 G/ m. E2 e r n" n, R/ U- ]6 S, A) {第5章 体系结构96
3 Y* M% k% i) g @% O5.1 逻辑和物理存储结构96& ]5 ?6 k. t) U) P2 I7 r4 o' A
5.1.1 逻辑存储结构967 U2 \# n* v( V' x7 V
5.1.2 物理存储结构970 L* {/ l5 V0 a+ z5 V9 \/ f. \
5.2 进程结构105
6 ` y( T: f) C- B( Q3 `6 ?5.2.1 守护进程与服务进程105
" i0 N/ h4 H0 r; G" B8 K5.2.2 辅助进程105
% e1 _4 g- M6 {7 a; c1 j& U5.3 内存结构106- i7 D" w- R8 u$ Z5 C# f
5.3.1 本地内存106
- P$ `' ^; g# m5.3.2 共享内存1072 p- E1 Y" L: V0 p( m( o% G
5.4 本章小结107' t/ d4 [: O4 H/ B d o9 F
第6章 并行查询109
, Z& ?, v- |1 V- h; g8 W* A; E5 z" C- h; f6.1 并行查询相关配置参数109: @) p+ ^1 e' i. T. \5 d8 A
6.2 并行扫描111
2 Q+ v# E% L* M c: c8 r y' [6.2.1 并行顺序扫描111
0 V! K$ ]- Z) G5 ~1 G! X6 |' ]5 D6.2.2 并行索引扫描1122 P" Y, v- F& c. f: n& g9 D
6.2.3 并行index-only扫描114$ k# f9 Y) d3 K3 \- d+ ?
6.2.4 并行bitmap heap扫描115' j! d1 c0 X7 ^( |, W+ J- `- h) H
6.3 并行聚合117; S# a7 L& S* W2 Q. ~
6.4 多表关联119
) \$ m6 F& }3 G1 Sjava8.com
. ] x T- k% q! d6.4.1 Nested loop多表关联120% I. {3 E! W' Q, c8 h& y5 a
6.4.2 Merge join多表关联121
- O% ^+ o' b- v: ~5 G6.4.3 Hash join多表关联122
6 ?1 a" E* r! c3 E D- Y6.5 本章小结124
7 H2 |6 O; O$ |8 J第7章 事务与并发控制125" M8 q( [4 k4 M" A5 C
7.1 事务和并发控制的概念125
; v* v$ d9 |+ b& j4 Y7.1.1 事务的基本概念和性质125
; s, V+ Y2 S0 ~3 t7.1.2 并发引发的现象126
/ h- m" {5 t' A* y* ~ a$ x7.1.3 ANSI SQL标准的事务隔离级别129
4 u4 k- ]# H, a/ i7.2 PostgreSQL的事务隔离级别130
$ E0 S7 G( D' X% @+ S7.2.1 查看和设置数据库的事务隔离级别131
$ M; Y8 d: y1 w) s \' K7.2.2 修改全局的事务隔离级别132; O. Q' s' Z# V6 L
7.2.3 查看当前会话的事务隔离级别132& O8 Z2 a" c K0 E. T8 {
7.2.4 设置当前会话的事务隔离级别132
& F+ j W" O2 I$ s7.2.5 设置当前事务的事务隔离级别133
' O% Z$ V, f- T8 l/ ~( [2 K3 {4 ~) ^7.3 PostgreSQL的并发控制133) q% q/ f! i" m
7.3.1 基于锁的并发控制134$ ~3 m$ R( E6 x. X7 u/ a1 U
7.3.2 基于多版本的并发控制134
: r% j* T6 C9 z1 V! E& V1 x7.3.3 通过pageinspect观察MVCC137
5 y M: S& k" B9 I* u% ?) ?4 A7.3.4 使用pg_repack解决表膨胀问题1409 X, x0 z C' P
7.3.5 支持事务的DDL140, P& A/ j0 M6 h9 y9 a1 \
7.4 本章小结141
# Z1 Y- i/ y* @. S Z: ^% R5 |第8章 分区表142' c: X: {9 v/ o
8.1 分区表的
0 q! x- B0 m. a" Q( O$ y
0 l# Y3 K) o- B B% Q