第1章 PostgreSQL简介 1
1.1 什么是PostgreSQL 1
1.1.1 伯克利Postgres项目 2
1.1.2 Postgres95 2
1.1.3 PostgreSQL 2
1.2 Postgres目前支持的平台和不支持的平台 3
1.3 PostgreSQL的许可协议 4
1.4 关于本书 5
1.5 说明 5
第2章 安装和配置 7
2.1 下载与解压缩 7
2.2 快速安装 7
2.3 编译、安装与回归测试 9
2.3.1 运行Postgres的要求 9
2.3.2 安装过程 9
第3章 快速入门 20
3.1 Postgres架构 20
3.2 Postgres的几个概念 21
3.3 设置环境 22
3.4 交互式监视器 22
3.5 数据类型 24
3.6 创建和删除数据库 25
3.7 创建表、视图和索引等 26
3.7.1 创建表 26
3.7.2 创建索引 27
3.7.3 创建视图 28
3.7.4 删除表、索引和视图 29
3.8 查询数据 29
3.8.1 简单SELECT语句 30
3.8.2 连接 31
3.8.3 聚集运算符 32
3.8.4 分组 32
3.8.5 Having 33
3.8.6 子查询 34
3.8.7 UNION,INTERSECT和EXCEPT 34
3.9 数据操纵 36
3.10 高级的特性 37
3.10.1 继承 37
3.10.2 非原子值 38
第4章 数据类型和运算符 41
4.1 数据类型 41
4.1.1 数值类型 42
4.1.2 serial类型 43
4.1.3 货币类型 43
4.1.4 字符类型 43
4.1.5 日期/时间类型 44
4.1.6 布尔类型 51
4.1.7 几何类型 51
4.1.8 IPv4网络地址和主机地址 53
4.2 与数据类型相关的运算符 54
4.2.1 通用运算符 54
4.2.2 数值运算符 55
4.2.3 几何运算符 56
4.2.4 时间间隔运算符 56
4.2.5 IPv4CIDR运算符 57
4.2.6 IP v4INET运算符 57
4.2.7 运算符的内部表示形式 58
4.2.8 字典优先级 58
4.3 与数据类型相关的函数 59
4.3.1 数学函数 59
4.3.2 字符串函数 60
4.3.3 日期/时间函数 61
4.3.4 几何函数 61
4.3.5 IP v4函数 63
4.3.6 Postgres函数常量 63
4.4 数据类型转换 63
4.4.1 运算符表达式的转换规则 65
4.4.2 函数运算中的转换规则 66
4.4.3 查询目标中的类型转换规则 68
4.4.4 UNION查询中的类型转换 69
第5章 SQL语法 71
5.1 关键词 71
5.1.1 保留关键词 71
5.1.2 非保留关键词 73
5.2 注释 74
5.3 名称 75
5.4 常量 75
5.4.1 字符串常量 75
5.4.2 整数常量 75
5.4.3 浮点数常量 75
5.4.4 Postgres用户定义类型常量 76
5.4.5 数组常量 76
5.5 域和列 76
5.5.1 域 76
5.5.2 列 77
5.6 运算符 77
5.7 表达式 77
5.7.1 参数 77
5.7.2 函数表达式 78
5.7.3 聚集表达式 78
5.8 目标表 78
5.9 限定条件 78
5.10 From列表 79
第6章 管理数据库 80
6.1 创建和删除数据库 80
6.1.1 为数据库指定存储位置 80
6.1.2 创建数据库 82
6.1.3 使用createdb程序创建数据库 84
6.1.4 删除数据库 85
6.1.5 使用dropdb删除数据库 86
6.2 运行时参数 87
6.2.1 设置运行时参数 88
6.2.2 恢复运行时参数 90
6.2.3 显示会话的运行时参数 90
6.3 用户管理 90
6.3.1 创建新用户 91
6.3.2 修改用户信息 94
6.3.3 删除用户 94
6.3.4 赋予用户权限 95
6.3.5 撤销用户权限 96
6.4 备份与恢复 97
6.4.1 用pg_dump备份数据 98
6.4.2 pg_dumpall 100
6.5 Postgres系统表 101
第7章 创建表 103
7.1 创建/删除序列 104
7.2 指定缺省值 106
7.3 数据完整性约束 107
7.3.1 NOTNULL约束 108
7.3.2 UNIQUE约束 109
7.3.3 CHECK约束 109
7.3.4 PRIMARY KEY约束 109
7.3.5 表约束CONSTRAINT子句 110
7.3.6 表UNIQUE约束 110
7.3.7 表PRIMARY KEY约束 111
7.4 数组列及继承 112
7.5 CREATE TABLE示例 113
7.6 CREATETABLEAS 114
7.7 修改表定义 114
7.8 删除表 116
第8章 查询、插入、修改和删除 118
8.1 查询数据 118
8.1.1 简单查询 119
8.1.2 高级查询技术 123
8.1.3 查询示例 126
8.2 插入数据 128
8.3 删除记录 130
8.4 修改记录 131
8.5 正则表达式 132
8.5.1 原子 133
8.5.2 匹配范围 134
8.5.3 子表达式 134
8.5.4 方括号表达式 134
8.5.5 分支 135
8.5.6 反向引用 136
8.5.7 正则表达式示例 136
第9章 索引 137
9.1 创建和删除索引 138
9.2 创建与删除索引示例 139
第10章 psql 141
10.1 连接到数据库 142
10.2 命令行选项 142
10.3 psql元命令 145
10.4 psql高级特性 152
10.4.1 变量 152
10.4.2 SQL代换 154
10.4.3 psql提示 154
10.5 示例 155
10.6 其他问题 157
10.6.1 Bug和解决办法 157
10.6.2 GNU readline 157
第11章 规则系统 159
11.1 创建规则 160
11.2 删除规则 161
11.3 SELECT规则 162
11.3.1 根据用户身份执行不同的操作 162
11.3.2 直接将查询重定向 162
11.4 INSERT规则 163
11.4.1 根据用户身份执行操作 163
11.4.2 直接取消当前INSERT操作 164
11.4.3 将当前操作重定向为其他SQL语句 164
11.4.4 实现FOREIGN KEY约束 164
11.5 删除规则 165
11.5.1 根据用户身份确定删除操作 165
11.5.2 实现外键DELETE约束 165
11.5.3 实现对视图的删除 166
11.5.4 执行其他命令 166
11.6 UPDATE规则 167
11.6.1 根据用户身份确定UPDATE操作 167
11.6.2 实现视图更新 167
11.6.3 撤销UPDATE操作 168
11.6.4 执行其他SQL命令 168
第12章 视图 169
12.1 创建和删除视图 169
12.1.1 用CREATE创建视图 170
12.1.2 用DROPVIEW删除视图 170
12.2 视图的许可权限 171
第13章 触发器 173
13.1 创建触发器 173
13.2 删除触发器 174
13.3 触发器管理器交互 174
13.4 数据变化可见性 175
13.5 示例 176
第14章 大对象接口 179
14.1 在SQL语句中访问大对象 179
14.2 在libpq中访问大对象 180
第15章 多版本并发控制 186
15.1 事务 186
15.2 事务隔离 187
15.2.1 ANSI/ISO隔离级别 187
15.2.2 读提交隔离级别 188
15.2.3 串行化隔离级别 188
15.3 加锁和表 188
15.3.1 表级锁 188
15.3.2 行级锁 190
15.4 加锁和索引 190
15.5 应用程序级的数据一致性检查 190
第16章 安全 194
16.1 用户验证 194
16.2 基于主机的存取控制 195
16.3 基于用户/组的存取控制 196
第17章 扩展PostgreSQL 197
17.1 Postgres类型系统 197
17.2 扩展SQL:函数 198
17.2.1 查询语言SQL函数 199
17.2.2 程序语言函数 202
17.2.3 编译语言C函数 202
17.2.4 函数重载 207
17.2.5 删除自定义函数 208
17.3 扩展SQL:类型 208
17.3.1 用户定义类型所需的函数 210
17.3.2 自定义数据类型 211
17.3.3 删除自定义数据类型 211
17.4 扩展SQL:运算符 212
17.4.1 创建新运算符 212
17.4.2 运算符优化信息 213
17.4.3 删除运算符 216
17.5 扩展SQL:聚集函数 217
17.5.1 创建聚集函数 217
17.5.2 删除聚集函数 219
第18章 服务器编程接口 221
18.1 SPI接口函数 221
18.1.1 SPI_connect 221
18.1.2 SPI_finish 222
18.1.3 SPI exec 222
18.1.4 SPI_prepare 224
18.1.5 SPI_saveplan 224
18.1.6 SPI execp 225
18.1.7 SPI_copytuple 226
18.1.8 SPI_modifytuple 226
18.1.9 SPI_fnumber 227
18.1.10 SPI_fname 227
18.1.11 SPIgetvalue 227
18.1.12 SPI_getbinval 228
18.1.13 SPI_gettype 228
18.1.14 SPI_gettypeid 228
18.1.15 SPI_getrelname 229
18.1.16 SPI_palloc 229
18.1.17 SPI_repalloc 229
18.1.18 SPI_pfree 230
18.2 内存管理 230
18.3 数据变化的可见性 230
18.4 示例 231
第19章 libpq 234
19.1 数据库连接函数 234
19.1.1 PQconnectdb 234
19.1.2 PQsetdbLogin 235
19.1.3 PQsetdb 235
19.1.4 PQconnectStart和PQconnectPoll 236
19.1.5 PQconndefaults 237
19.1.6 PQfinish 238
19.1.7 PQreset 238
19.1.8 PQresetStart和PQresetPoll 238
19.1.9 返回连接属性的函数 238
19.1.10 PQerrorMessage 239
19.1.11 PQbackendPID 239
19.1.12 用于环境协商的函数 239
19.2 查询执行函数 240
19.2.1 PQexec 240
19.2.2 PQresultStatus 240
19.2.3 PQresStatus 241
19.2.4 PQresultErrorMessage 241
19.2.5 PQntuples 241
19.2.6 PQnfields 241
19.2.7 PQbinaryTuples 241
19.2.8 pQfname 241
19.2.9 PQfnumber 241
19.2.10 pQftype 242
19.2.11 PQfsize 242
19.2.12 PQfmod 242
19.2.13 PQgetvalue 242
19.2.14 PQgetlength 242
19.2.15 PQgetisnull 243
19.2.16 PQcmdStatus 243
19.2.17 PQcmdTuples 243
19.2.18 PQoidValue 243
19.2.19 PQoidStatus 243
19.2.20 PQprint 243
19.2.21 PQprintTuples 244
19.2.22 PQdisplayTuples 244
19.2.23 PQclear 244
19.2.24 PQmakeEmptyPGresult 245
19.3 异步查询处理 245
19.3.1 PQsendQuery 245
19.3.2 PQgetResult 245
19.3.3 PQconsumeInput 246
19.3.4 PQisBusy 246
19.3.5 PQsocket 246
19.3.6 PQrequestCancel 247
19.4 快速路径接口 247
19.5 异步通知 248
19.5.1 PQnotifies 248
19.5.2 PQgetline 249
19.5.3 PQgetlineAsync 249
19.5.4 PQputline 250
19.5.5 PQputnbytes 250
19.5.6 PQendcopy 250
19.6 Libpq跟踪函数 251
19.6.1 PQtrace 251
19.6.2 PQuntrac 251
19.7 Libpq控制函数 251
19.8 环境变量 251
19.9 示例程序 252
19.9.1 示例程序1 252
19.9.2 示例程序2 254
19.9.3 示例程序3 256
第20章 libpq++ 260
20.1 环境变量 260
20.2 libpq++类 261
20.2.1 数据库连接函数 261
20.2.2 查询执行函数 262
20.2.3 异步通知 263
20.2.4 与COPY命令相关联的函数 264
第21章 pgtcl 266
21.1 pgtcl命令 266
21.1.1 pg_connect 266
21.1.2 pg_disconnect 267
21.1.3 pg_conndefaults 267
21.1.4 pg_exec 268
21.1.5 pg_result 268
21.1.6 pg_select 269
21.1.7 pg_listen 270
21.1.8 pg_lo_creat 270
21.1.9 pg_lo_open 271
21.1.10 pg_lo_close 271
21.1.11 pg_lo_read 272
21.1.12 Pg_lo_write 272
21.1.13 pg_lo lseek 272
21.1.14 pg_lo_tell 273
21.1.15 pg_lo_unlink 273
21.1.16 pg_lo_import 273
21.1.17 pg_lo_export 274
21.2 示例 274
第22章 ecpg 275
22.1 运行ecpg 275
22.2 使用嵌入式SQL语言 276
22.2.1 声明部分 276
22.2.2 包含语句 277
22.2.3 连接语句 277
22.2.4 断开连接 278
22.2.5 打开游标语句 278
22.2.6 提交语句 278
22.2.7 回滚语句 278
22.2.8 其他语句 279
22.3 错误处理 280
22.4 示例 281
第23章 编程语言 283
23.1 编程语言概述 283
23.2 创建编程语言 283
23.2.1 使用CREATE LANGUAGE 283
23.2.2 使用createlang 286
23.3 删除编程语言 286
23.3.1 使用DROP LANGUAGE 286
23.3.2 使用droplang 287
23.4 PL/pgSQL 288
23.4.1 PL/pgSQL的结构 288
23.4.2 注释 288
23.4.3 声明变量 289
23.4.4 数据类型 289
23.4.5 表达式 290
23.4.6 语句 291
23.4.7 触发器程序 293
23.4.8 例外处理 294
23.4.9 示例 294
23.5 PL/Tcl 295
23.5.1 在PL/Tcl中定义函数 296
23.5.2 在PL/Tcl中的全局数据 296
23.5.3 用PL/Tcl创建触发器程序 297
23.5.4 从PL/Tcl中访问数据库 298
23.5.5 模块和未知命令 299
第24章 实用程序 300
24.1 普通应用程序 300
24.1.1 createdb 300
24.1.2 createlang 301
24.1.3 createuser 302
24.1.4 dropdb 303
24.1.5 droplang 304
24.1.6 dropuser 305
24.1.7 pgaccess 306
24.1.8 pgadmin 308
24.1.9 pg_dump 308
24.1.10 pg_dumpall 310
24.1.11 pgtclsh 311
24.1.12 pgtksh 311
24.1.13 vacuumdb 312
24.2 系统实用程序 313
24.2.1 initdb 313
24.2.2 initlocation 315
24.2.3 ipcclean 316
24.2.4 pg_passwd 316
24.2.5 pg_upgrade 318
24.2.6 postgres 318
24.2.7 postmaster 320
第25章 SQL命令参考 324
25.1 CREATE DATABASE 324
25.2 DROP DATABASE 325
25.3 CREATETABLE 326
25.4 CREATETABLEAS 334
25.5 ALTER TABLE 334
25.6 DROP TABLE 336
25.7 CREATE USER 336
25.8 ALTERUSER 338
25.9 DROP USER 339
25.10 CREATE AGGREGATE 340
25.11 DROP AGGREGATE 341
25.12 CREATE FUNCTION 342
25.13 DROPFUNCTION 344
25.14 CREATEINDEX 344
25.15 DROPINDEX 346
25.16 CREATELANGUAGE 346
25.17 DROPLANGUAGE 349
25.18 CREATEOPERATOR 350
25.19 DROPOPERATOR 351
25.20 CREATERULE 352
25.21 DROPRULE 354
25.22 CREATE SEQUENCE 355
25.23 DROP SEQUENCE 356
25.24 CREATETRIGGER 357
25.25 DROPTRIGGER 358
25.26 CREATETYPE 358
25.27 DROPTYPE 360
25.28 CREATEVIEW 361
25.29 DROPVIEW 362
25.30 SELECT 362
25.31 SELECTINTO 367
25.32 UPDATE 368
25.33 DELETE 369
25.34 INSERT 370
25.35 GRANT 371
25.36 REVOKE 372
25.37 BEGIN 373
25.38 COMMIT 374
25.39 ROLLBACK 375
25.40 ABORT 375
25.41 END 376
25.42 DECLARE 376
25.43 FETCH 378
25.44 MOVE 380
25.45 CLOSE 380
25.46 LISTEN 381
25.47 NOTIFY 382
25.48 UNLISTEN 383
25.49 LOAD 384
25.50 LOCK 385
25.51 COPY 388
25.52 SET 390
25.53 RESET 394
25.54 SHOW 395
25.55 EXPLAIN 396
25.56 TRUNCATE 396
25.57 CLUSTER 397
25.58 VACUUM 398