Contents
- 前言
- 第一篇 准备篇
- 第1章 PostgreSQL简介
- 1.1 什么是PostgreSQL
- 1.1.1 PostgreSQL的发展历史
- 1.1.2 PostgreSQL数据库的优势
- 1.1.3 PostgreSQL应用现状和发展趋势
- 1.2 PostgreSQL数据库与其他数据库的对比
- 1.2.1 PostgreSQL与MySQL数据库的对比 id: 6621aa0a-b4b4-4a6e-bdac-886a4552dc82
- 1.2.2 PostgreSQL与Oracle数据库的对比
- 1.3 小结
- 1.1 什么是PostgreSQL
- 第2章 PostgreSQL的安装与配置
- 2.1 从发行版本安装
- 2.1.1 Red Hat/CentOS下的安装方法
- 2.1.2 Windows下的安装方法
- 2.1.3 从发行版本安装总结
- 2.2 从源码安装
- 2.2.1 编译安装过程简介
- 2.2.2 下载源代码
- 2.2.3 编译及安装
- 2.2.4 PostgreSQL的配置
- 2.2.5 创建数据库实例
- 2.2.6 安装contrib目录下的工具
- 2.2.7 启动和停止数据库
- 2.2.8 编译安装过程中的常见问题及解决方法
- 2.3 PostgreSQL的简单配置
- 2.3.1 pg_hba.conf的配置
- 2.3.2 修改监听的IP和端口
- 2.3.3 数据库日志相关参数
- 2.3.4 内存参数的设置
- 2.4 PostgreSQL的安装技巧
- 2.4.1 不想把数据库实例创建到“/var/lib/pgsql”目录下
- 2.4.2 如何使用较大的数据块提高I/O性能
- 2.4.3 打开数据块的checksum功能
- 2.5 小结
- 2.1 从发行版本安装
- 第3章 SQL入门
- 3.1 SQL语句语法简介
- 3.1.1 语句的分类
- 3.1.2 词法结构
- 3.2 DDL语句
- 3.2.1 建表语句
- 3.2.2 删除表语句
- 3.3 DML语句
- 3.3.1 插入语句
- 3.3.2 更新语句
- 3.3.3 删除语句
- 3.4 查询语句
- 3.4.1 单表查询语句
- 3.4.2 过滤条件的查询
- 3.4.3 排序
- 3.4.4 分组查询
- 3.4.5 多表关联查询
- 3.4.6 子查询
- 3.5 其他SQL语句
- 3.5.1 INSERT…SELECT语句
- 3.5.2 UNION语句
- 3.5.3 TRUNCATE TABLE语句
- 3.6 小结
- 3.1 SQL语句语法简介
- 第1章 PostgreSQL简介
- 第二篇 基础篇
- 第4章 psql工具
- 4.1 psql介绍
- 4.2 psql的简单使用
- 4.3 psql的常用命令
- 4.3.1 “ h”命令
- 4.3.2 “ d”命令
- 4.3.3 指定客户端字符集的命令
- 4.3.4 格式化输出的 pset命令
- 4.3.5 “ x”命令
- 4.3.6 执行存储在外部文件中的SQL命令
- 4.3.7 编辑命令
- 4.3.8 输出信息的“ echo”命令
- 4.3.9 其他命令
- 4.4 psql的使用技巧
- 4.4.1 历史命令与补全功能
- 4.4.2 自动提交技巧
- 4.4.3 如何得到psql中快捷命令执行的实际SQL
- 4.5 小结
- 第5章 数据类型
- 5.1 数据类型介绍
- 5.1.1 数据类型的分类
- 5.1.2 数据类型的输入与转换
- 5.2 布尔类型
- 5.2.1 布尔类型介绍
- 5.2.2 布尔类型的操作符
- 5.3 数值类型
- 5.3.1 数值类型介绍
- 5.3.2 整数类型
- 5.3.3 精确的小数类型
- 5.3.4 浮点数类型
- 5.3.5 序列类型
- 5.3.6 货币类型
- 5.3.7 数学函数和操作符
- 5.4 字符串类型
- 5.4.1 字符串类型介绍
- 5.4.2 字符串函数和操作符
- 5.5 二进制数据类型
- 5.5.1 二进制数据类型介绍
- 5.5.2 二进制数据类型转义表示
- 5.5.3 二进制数据类型的函数
- 5.6 位串类型
- 5.6.1 位串类型介绍
- 5.6.2 位串类型的使用方法
- 5.6.3 位串的操作符及函数
- 5.7 日期/时间类型
- 5.7.1 日期/时间类型介绍
- 5.7.2 日期输入
- 5.7.3 时间输入
- 5.7.4 特殊值
- 5.7.5 函数和操作符列表
- 5.7.6 时间函数
- 5.7.7 extract和date_part函数
- 5.8 枚举类型
- 5.8.1 枚举类型的使用
- 5.8.2 枚举类型说明
- 5.8.3 枚举类型的函数
- 5.9 几何类型
- 5.9.1 几何类型概况
- 5.9.2 几何类型的输入
- 5.9.3 几何类型的操作符
- 5.9.4 几何类型的函数
- 5.10 网络地址类型
- 5.10.1 网络地址类型概况
- 5.10.2 inet与cidr类型
- 5.10.3 macaddr类型
- 5.10.4 网络地址类型的操作符
- 5.10.5 网络地址类型的函数
- 5.11 复合类型
- 5.11.1 复合类型的定义
- 5.11.2 复合类型的输入
- 5.11.3 访问复合类型
- 5.11.4 修改复合类型
- 5.11.5 复合类型的输入输出
- 5.12 xml类型
- 5.12.1 xml类型的输入
- 5.12.2 字符集的问题
- 5.12.3 xml类型函数
- 5.13 JSON类型
- 5.13.1 JSON类型简介
- 5.13.2 JSON类型的输入与输出
- 5.13.3 JSON类型的操作符
- 5.13.4 JSON类型的函数
- 5.13.5 JSON类型的索引
- 5.14 Range类型
- 5.14.1 Range类型简介
- 5.14.2 创建Range类型
- 5.14.3 Range类型的输入与输出
- 5.14.4 Range类型的操作符
- 5.14.5 Range类型的函数
- 5.14.6 Range类型的索引和约束
- 5.15 数组类型
- 5.15.1 数组类型的声明
- 5.15.2 如何输入数组值
- 5.15.3 访问数组
- 5.15.4 修改数组
- 5.15.5 数组的操作符
- 5.15.6 数组的函数
- 5.16 伪类型
- 5.17 其他类型
- 5.17.1 UUID类型
- 5.17.2 pg_lsn类型
- 5.18 小结
- 5.1 数据类型介绍
- 第6章 逻辑结构管理
- 6.1 数据库逻辑结构介绍
- 6.2 数据库基本操作
- 6.2.1 创建数据库
- 6.2.2 修改数据库
- 6.2.3 删除数据库
- 6.2.4 常见问题及解答
- 6.3 模式
- 6.3.1 什么是模式
- 6.3.2 模式的使用
- 6.3.3 公共模式
- 6.3.4 模式的搜索路径
- 6.3.5 模式的权限
- 6.3.6 模式的可移植性
- 6.4 表
- 6.4.1 创建表
- 6.4.2 表的存储属性
- 6.4.3 临时表
- 6.4.4 UNLOGGED表
- 6.4.5 默认值
- 6.4.6 约束
- 6.4.7 修改表
- 6.4.8 表继承
- 6.4.9 通过表继承实现分区表
- 6.4.10 声明式分区
- 6.5 触发器
- 6.5.1 创建触发器
- 6.5.2 语句级触发器与行级触发器
- 6.5.3 BEFORE触发器与AFTER触发器
- 6.5.4 删除触发器
- 6.5.5 触发器的行为
- 6.5.6 触发器函数中的特殊变量
- 6.6 事件触发器
- 6.6.1 创建事件触发器
- 6.6.2 修改事件触发器
- 6.7 表空间
- 6.7.1 什么是表空间
- 6.7.2 表空间的使用方法
- 6.8 视图
- 6.8.1 什么是视图
- 6.8.2 创建视图
- 6.8.3 可更新视图
- 6.9 索引
- 6.9.1 索引简介
- 6.9.2 索引的分类
- 6.9.3 创建索引
- 6.9.4 并发创建索引
- 6.9.5 修改索引
- 6.9.6 删除索引
- 6.10 用户及权限管理
- 6.10.1 用户和角色
- 6.10.2 创建用户和角色
- 6.10.3 权限的管理
- 6.10.4 函数和触发器的权限
- 6.10.5 权限的总结
- 6.10.6 权限的示例
- 6.11 事务、并发和锁
- 6.11.1 什么是ACID
- 6.11.2 DDL事务
- 6.11.3 事务的使用方法
- 6.11.4 SAVEPOINT
- 6.11.5 事务隔离级别
- 6.11.6 两阶段提交
- 6.11.7 锁机制
- 6.11.8 死锁及防范
- 6.11.9 表级锁命令LOCK TABLE
- 6.11.10 行级锁命令
- 6.11.11 锁的查看
- 6.12 小结
- 第7章 PostgreSQL的核心架构
- 7.1 进程及内存结构
- 7.1.1 进程和内存架构图
- 7.1.2 主进程Postmaster介绍
- 7.1.3 Logger系统日志进程介绍
- 7.1.4 BgWriter后台写进程介绍
- 7.1.5 WalWriter预写式日志写进程介绍
- 7.1.6 PgArch归档进程
- 7.1.7 AutoVacuum自动清理进程
- 7.1.8 PgStat统计数据收集进程
- 7.1.9 共享内存
- 7.1.10 本地内存
- 7.2 存储结构
- 7.2.1 逻辑存储结构
- 7.2.2 软件目录结构
- 7.2.3 物理存储结构
- 7.2.4 表空间的目录
- 7.3 应用程序访问接口
- 7.3.1 访问接口总体图
- 7.3.2 不同编程语言的PostgreSQL驱动介绍
- 7.4 小结
- 第8章 服务管理
- 8.1 服务的启停及原理
- 8.1.1 服务的启停方法
- 8.1.2 pg_ctl工具
- 8.1.3 信号
- 8.1.4 postgres及单用户模式
- 8.2 服务配置介绍
- 8.2.1 配置参数
- 8.2.2 连接配置项
- 8.2.3 内存配置项
- 8.2.4 预写式日志的配置项
- 8.2.5 错误报告和日志项
- 8.3 访问控制配置文件
- 8.3.1 pg_hba.conf文件
- 8.3.2 认证方法介绍
- 8.3.3 认证方法实战
- 8.4 备份和还原
- 8.4.1 逻辑备份
- 8.4.2 pg_dump命令
- 8.4.3 pg_restore命令
- 8.4.4 pg_dump和pg_restore应用示例
- 8.4.5 物理备份
- 8.4.6 使用LVM快照进行热备份
- 8.5 常用的管理命令
- 8.5.1 查看系统信息的常用命令
- 8.5.2 系统维护常用命令
- 8.6 小结
- 第4章 psql工具
- 第三篇 提高篇
- 第9章 PostgreSQL执行计划
- 9.1 执行计划的解释
- 9.1.1 EXPLAIN命令
- 9.1.2 EXPLAIN输出结果解释
- 9.1.3 EXPLAIN使用示例
- 9.1.4 全表扫描
- 9.1.5 索引扫描
- 9.1.6 位图扫描
- 9.1.7 条件过滤
- 9.1.8 嵌套循环连接
- 9.1.9 散列连接
- 9.1.10 合并连接
- 9.2 与执行计划相关的配置项
- 9.2.1 ENABLE_*参数
- 9.2.2 COST基准值参数
- 9.2.3 基因查询优化的参数
- 9.2.4 其他执行计划配置项
- 9.3 统计信息的收集
- 9.3.1 统计信息收集器的配置项
- 9.3.2 SQL执行的统计信息输出
- 9.3.3 手动收集统计信息
- 9.4 小结
- 第10章 PostgreSQL中的技术内幕
- 10.1 表中的系统字段
- 10.1.1 oid
- 10.1.2 ctid
- 10.1.3 xmin、xmax、cmin、cmax
- 10.2 多版本并发控制
- 10.2.1 多版本并发控制的原理
- 10.2.2 PostgreSQL中的多版本并发控制
- 10.2.3 PostgreSQL多版本的优劣分析
- 10.3 物理存储结构
- 10.3.1 PostgreSQL中的术语
- 10.3.2 数据块结构
- 10.3.3 Tuple结构
- 10.3.4 数据块空闲空间管理
- 10.3.5 可见性映射表文件
- 10.4 控制文件解密
- 10.4.1 控制文件介绍
- 10.4.2 数据库的唯一标识串解密
- 10.4.3 Checkpoint信息解密
- 10.4.4 与Standby相关的信息
- 10.5 WAL文件解密
- 10.5.1 WAL文件介绍
- 10.5.2 WAL文件名的秘密
- 10.5.3 WAL文件循环复用原理
- 10.6 CommitLog文件与事务ID技术解密
- 10.6.1 CommitLog文件介绍
- 10.6.2 事务ID技术
- 10.7 实例恢复与热备份原理解密
- 10.7.1 实例恢复的原理
- 10.7.2 热备份的原理
- 10.8 一些技术解密
- 10.8.1 Index-Only Scans
- 10.8.2 Heap-Only Tuples
- 10.9 小结
- 第11章 PostgreSQL的特色功能
- 11.1 规则系统
- 11.1.1 SELECT规则
- 11.1.2 更新规则
- 11.1.3 规则和权限
- 11.1.4 规则和命令状态
- 11.1.5 规则与触发器的比较
- 11.2 模式匹配和正则表达式
- 11.2.1 PostgreSQL中的模式匹配和正则表达式
- 11.2.2 传统SQL的LIKE操作符
- 11.2.3 SIMILAR TO正则表达式
- 11.2.4 POSIX正则表达式
- 11.2.5 模式匹配函数substring
- 11.3 LISTEN与NOTIFY命令
- 11.3.1 LISTEN与NOTIFY的简单示例
- 11.3.2 LISTEN与NOTIFY的相关命令
- 11.3.3 LISTEN与NOTIFY的使用详解
- 11.4 索引的特色
- 11.4.1 表达式上的索引
- 11.4.2 部分索引
- 11.4.3 GiST索引
- 11.4.4 SP-GiST索引
- 11.4.5 GIN索引
- 11.4.6 BRIN索引
- 11.5 序列的使用
- 11.5.1 序列的创建
- 11.5.2 序列的使用及相关函数
- 11.5.3 常见问题及解答
- 11.6 咨询锁的使用
- 11.6.1 什么是咨询锁
- 11.6.2 咨询锁的函数及使用
- 11.6.3 常见问题及解答
- 11.7 SQL/MED
- 11.7.1 SQL/MED的介绍
- 11.7.2 外部数据包装器对象
- 11.7.3 外部服务器对象
- 11.7.4 用户映射对象
- 11.7.5 外部表对象
- 11.7.6 file_fdw使用实例
- 11.7.7 postgres_fdw使用实例
- 11.7.8 oracle_fdw使用实例
- 11.7.9 odbc_fdw使用实例
- 11.8 全文检索
- 11.8.1 全文检索介绍
- 11.8.2 全文检索入门
- 11.8.3 使用zhparser做中文全文检索
- 11.9 数组的特色功能
- 11.9.1 数组的应用场景介绍
- 11.9.2 数组的使用技巧
- 11.10 并行查询功能
- 11.10.1 并行查询相关的配置参数
- 11.10.2 支持的并行操作介绍
- 11.11 小结
- 第12章 数据库优化
- 12.1 数据库优化准则和方法
- 12.1.1 数据库优化准则
- 12.1.2 优化方法
- 12.2 硬件知识
- 12.2.1 CPU及服务器体系结构
- 12.2.2 内存
- 12.2.3 硬盘
- 12.3 文件系统及I/O调优
- 12.3.1 文件系统的崩溃恢复
- 12.3.2 Ext2文件系统
- 12.3.3 Ext3文件系统
- 12.3.4 Ext4文件系统
- 12.3.5 XFS文件系统
- 12.3.6 Barriers I/O
- 12.3.7 I/O调优的方法
- 12.3.8 SSD的Trim优化
- 12.4 性能监控
- 12.4.1 数据库性能视图
- 12.4.2 Linux监控工具
- 12.5 数据库配置优化
- 12.5.1 内存配置优化
- 12.5.2 大页内存的配置
- 12.5.3 VACUUM中的优化
- 12.5.4 预写式日志写优化
- 12.5.5 配置的最佳实践
- 12.6 数据库的逻辑结构优化
- 12.6.1 表的优化
- 12.6.2 索引的优化
- 12.7 SQL的优化
- 12.7.1 找出慢的SQL
- 12.7.2 SQL语句的优化技巧
- 12.8 小结
- 第13章 Standby数据库的搭建
- 13.1 Standby数据库原理
- 13.1.1 PITR原理
- 13.1.2 WAL日志归档
- 13.1.3 流复制
- 13.1.4 Standby数据库的运行原理
- 13.1.5 建Standby数据库的步骤
- 13.2 pg_basebackup命令行工具
- 13.2.1 pg_basebackup介绍
- 13.2.2 pg_basebackup的命令行参数
- 13.2.3 pg_basebackup使用示例
- 13.3 异步流复制Hot Standby的示例
- 13.3.1 配置环境
- 13.3.2 主数据库的配置
- 13.3.3 在Standby上生成基础备份
- 13.3.4 启动Standby数据库
- 13.3.5 交换主备库的角色
- 13.3.6 故障切换
- 13.4 同步流复制的Standby数据库
- 13.4.1 同步流复制的架构
- 13.4.2 同步复制的配置
- 13.4.3 配置实例
- 13.5 检查备库及流复制情况
- 13.5.1 检查异步流复制的情况
- 13.5.2 检查同步流复制的情况
- 13.5.3 pg_stat_replication视图详解
- 13.5.4 查看备库的状态
- 13.6 Hot Standby的限制
- 13.6.1 Hot Standby的查询限制
- 13.6.2 Hot Standby的查询冲突处理
- 13.7 恢复配置详解
- 13.7.1 归档恢复配置项
- 13.7.2 Recovery Target配置
- 13.7.3 Standby Server配置
- 13.8 流复制的注意事项
- 13.8.1 min_wal_size参数的配置
- 13.8.2 vacuum_defer_cleanup_age参数的配置
- 13.9 逻辑复制
- 13.9.1 逻辑复制的介绍
- 13.9.2 逻辑复制的发布
- 13.9.3 逻辑复制的订阅
- 13.9.4 逻辑复制的冲突处理
- 13.9.5 逻辑复制的限制
- 13.9.6 逻辑复制的监控与安全
- 13.9.7 逻辑复制的相关配置参数
- 13.9.8 逻辑复制的搭建实践
- 13.10 小结
- 第9章 PostgreSQL执行计划
- 第四篇 架构篇
- 第14章 PgBouncer
- 14.1 PgBouncer介绍
- 14.2 PgBouncer的相关概念
- 14.3 PgBouncer的安装方法
- 14.4 PgBouncer的简单使用
- 14.4.1 简单配置方法
- 14.4.2 启动PgBouncer
- 14.4.3 停止PgBouncer
- 14.4.4 查看连接池信息
- 14.5 PgBouncer的配置文件详解
- 14.5.1 “[databases]”配置
- 14.5.2 “[pgbouncer]”配置
- 14.5.3 用户密码文件
- 14.6 小结
- 第15章 Slony-I的使用
- 15.1 Slony-I中的主要概念
- 15.1.1 集群
- 15.1.2 节点
- 15.1.3 复制集合
- 15.1.4 数据原始生产者、数据提供者和数据订阅者
- 15.1.5 Slon守护程序
- 15.1.6 Slonik配置程序
- 15.2 Slony-I复制的一些限制
- 15.3 在Linux下安装和配置Slony-I
- 15.3.1 二进制方式安装Slony-I
- 15.3.2 源码编译安装Slony-I
- 15.3.3 配置Slony-I的基本复制
- 15.3.4 添加和移除表的复制
- 15.3.5 主备切换
- 15.4 小结
- 第16章 Bucardo的使用
- 16.1 Bucardo的相关概念
- 16.1.1 Bucardo介绍
- 16.1.2 Bucardo FAQ
- 16.1.3 Bucardo同步中定义的概念
- 16.2 Bucardo的安装方法
- 16.2.1 Bucardo的安装步骤
- 16.2.2 安装Test-Simple、ExtUtils-MakeMaker、version
- 16.2.3 安装DBI及DBD:Pg
- 16.2.4 安装DBIx-Safe
- 16.2.5 安装Bucardo源码包
- 16.2.6 使用yum安装Bucardo
- 16.3 Bucardo同步配置
- 16.3.1 示例环境
- 16.3.2 Bucardo的工作原理
- 16.3.3 bucardo install
- 16.3.4 配置同步
- 16.3.5 Bucardo常用命令
- 16.4 Bucardo的日常维护
- 16.4.1 Bucardo的触发器日志清理
- 16.4.2 临时停止和启动同步的方法
- 16.4.3 新增表到同步的方法
- 16.4.4 移除某个表或序列的方法
- 16.5 小结
- 第17章 PL/Proxy的使用
- 17.1 PL/Proxy的相关概念
- 17.1.1 什么是PL/Proxy
- 17.1.2 PL/Proxy的特性说明
- 17.2 PL/Proxy的安装及配置
- 17.2.1 编译安装
- 17.2.2 安装规划
- 17.2.3 配置过程
- 17.3 PL/Proxy的集群配置详解
- 17.3.1 Cluster configuration API方式
- 17.3.2 SQL/MED方式配置集群
- 17.4 PL/Proxy语言详解
- 17.4.1 CONNECT
- 17.4.2 CLUSTER
- 17.4.3 RUN ON
- 17.4.4 SPLIT
- 17.4.5 TARGET
- 17.5 PL/Proxy的高可用方案
- 17.5.1 方案介绍
- 17.5.2 方案架构
- 17.5.3 具体实施步骤
- 17.6 小结
- 第18章 pgpool-II的使用
- 18.1 pgpool-II的相关概念
- 18.1.1 什么是pgpool-II
- 18.1.2 pgpool-II的发展简介
- 18.1.3 pgpool-II的架构
- 18.1.4 pgpool-II的工作模式
- 18.1.5 pgpool-II的程序模块
- 18.2 pgpool-II的安装方法
- 18.2.1 安装软件
- 18.2.2 安装pgpool_regclass
- 18.2.3 建立insert_lock表
- 18.2.4 安装pgpool_recovery
- 18.3 pgpool-II配置快速入门
- 18.3.1 pgpool-II的配置过程
- 18.3.2 内置复制模式的示例
- 18.3.3 流复制的主备模式示例
- 18.3.4 show命令
- 18.4 pgpool-II高可用配置方法
- 18.4.1 pgpool-II高可用切换及恢复的原理
- 18.4.2 pgpool-II的在线恢复
- 18.4.3 流复制模式中的故障切换
- 18.4.4 pgpool-II的健康检查
- 18.4.5 流复制的主备模式的高可用示例
- 18.4.6 watchdog的配置
- 18.5 小结
- 第19章 Postgres-XC的使用
- 19.1 Postgres-XC的相关概念
- 19.1.1 什么是Postgres-XC
- 19.1.2 Postgres-XC的特点
- 19.1.3 Postgres-XC的性能
- 19.1.4 Postgres-XC的组件
- 19.2 Postgres-XC的安装
- 19.2.1 源码安装方法
- 19.2.2 Postgres-XC目录及程序说明
- 19.3 配置Postgres-XC集群
- 19.3.1 集群规划
- 19.3.2 初始化GTM
- 19.3.3 初始化GTM备库
- 19.3.4 初始化GTM Proxy
- 19.3.5 初始化Coordinators、数据节点
- 19.3.6 启动集群
- 19.3.7 停止集群
- 19.3.8 配置集群节点信息
- 19.4 Postgres-XC的使用
- 19.4.1 建表详解
- 19.4.2 使用限制
- 19.4.3 重新分布数据
- 19.4.4 增加Coordinator节点的方法
- 19.4.5 移除Coordinator节点的方法
- 19.4.6 增加Datanode节点的方法
- 19.4.7 移除Datanode节点的方法
- 19.5 小结
- 第20章 高可用性方案设计
- 20.1 高可用架构基础
- 20.1.1 各种高可用架构介绍
- 20.1.2 服务的可靠性设计
- 20.1.3 数据可靠性设计
- 20.2 基于共享存储的高可用方案
- 20.2.1 SAN存储方案
- 20.2.2 DRBD方案
- 20.3 WAL日志同步或流复制同步方案
- 20.3.1 持续复制归档的Standby方法
- 20.3.2 异步流复制方案
- 20.3.3 同步流复制方案
- 20.4 基于触发器的同步方案
- 20.4.1 基于触发器的同步方案特点
- 20.4.2 基于此方案的同步软件介绍
- 20.5 基于中间件的高可用方案
- 20.5.1 基于中间件的高可用方案的特点
- 20.5.2 基本中间件的开源软件介绍
- 20.6 小结
- 第14章 PgBouncer