# 25.2\. 日志传送备份服务器
连续归档可以配合随时准备取代失效主服务器的一个或多个_备份服务器_, 用于创建一个_高可用性_(HA)集群。 这个能力通常被称为_热备份_或_日志传送_。
虽然主服务器和备份服务器只是松散的耦合在一起, 但它们必须同时运行。主服务器以连续归档模式运行, 备份服务器以连续恢复模式运行并从主服务器不停的读取WAL文件。 因为数据库的表无需为此进行任何改变,所以与其它复制方法相比, 额外的管理开销很小。并且这种方法对主服务器的性能影响也很小。
直接从一个数据库服务器移动WAL到另一个服务器通常被称为日志传送(LogShipping)。 PostgreSQL实现了基于文件的日志传送, 意思是WAL记录每次移动一个完整的文件(WAL段)。 WAL文件(16MB)可以被轻易的在任意两个地点之间传送, 不管是与邻近的系统还是地球另一面的系统。 所需带宽取决于主服务器的事务发生速度。 基于记录的日志传送更加细粒度,并且WAL流在网络连接中增量改变。
日志传送是异步的,也就是WAL记录在事务提交之后才被传送。 也就是说主服务器遭遇致命故障后尚未传送的事务数据将会丢失。 数据丢失的长度可以使用`archive_timeout`加以限制,比如限制为几秒钟。 当然这么小的设置也导致了传送带宽的大幅增长。 流复制(参阅[Section 25.2.5](#calibre_link-1048))允许数据丢失的更小窗口。
恢复性能足够好,备份服务器一旦被激活通常只有很短的时间不能使用。 因此,我们认为这个方案可以作为热备份来提供高可用性。 将服务器从一个已归档的基础备份中恢复将可能耗费大量时间, 所以这个方案只能用于灾难恢复而不能用于提供高可用性。 备用服务器还可以用于只读查询,在这种情况下它被称为热备份服务器。 参见[Section 25.5](#calibre_link-1047)获取更多信息。
## 25.2.1\. 规划
至少从数据库服务器的角度看, 创建主服务器和备份服务器并令两者尽可能完全相同是非常明智的。 特别是表空间的路径名必须保持完全一致, 这样主服务器和备份服务器就必须拥有同样的表空间挂载路径(如果使用了表空间的话)。 需要记住的是如果在主服务器上执行了[CREATE TABLESPACE](#calibre_link-99)命令, 那么该命令需要的任何新挂载点必须在执行该命令之前同时在主服务器和备份服务器 上创建。 硬件不必完全相同,但是经验显示维护两个完全相同的系统比维护两 个不同的系统要少许多麻烦。 无论如何,应尽量保持体系结构相同— 比如一个是32-bit系统另一个是64-bit系统将不能正常工作。
通常,在主PostgreSQL版本不同的服务器之间传送日志是不可能的, 它是PostgreSQL全球开发组在次要版本升级中不能改变磁盘格式的一种策略。 在主服务器和备份服务器上运行不同的次要版本可能成功。 但是,没有正式支持,建议你尽可能的保持主服务器和备用服务器在同一个级别上。 在进行版本升级的时候,正确的做法是首先升级备份服务器— 因为新版本的服务器通常可以读取老版本的WAL文件,但反之则不然。
## 25.2.2\. 备用服务器操作
在备用模式,该服务器连续应用从主服务器收取的WAL。 备服务器可以从一个WAL归档(参阅[restore_command](#calibre_link-1656)) 或直接通过一个TCP连接(流复制)从主服务器上读取WAL。 备服务器也可以在备用集群`pg_xlog`尝试查找恢复任何WAL。 这通常发生在服务器重启后,当备服务器重播,在备服务器重启前, 从主服务器流复制的WAL,但是你也可以手工复制文件到`pg_xlog`, 在任何时候可以重播它们。
在启动,备服务器恢复可用在所有的WAL开始存档位置,调用`restore_command`。 一旦它到达可用WAL的结束,`restore_command`失败, 将尝试恢复`pg_xlog`目录下任何可用的WAL。 如果那也失败了,并且已经配置了流复制,则尝试连接到主服务器, 从在归档或`pg_xlog`找到最后一条有效的记录开始WAL流。如果那也失败了, 或没有配置流复制,或连接断开,备服务器再次回到步骤1,循环尝试从归档里恢复文件。 从归档,`pg_xlog`,通过连续流复制直到服务器停止或有触发器文件触发的失效切换时。
当运行`pg_ctl promote`时,或者找到一个触发文件(`trigger_file`)时, 退出备用模式并且服务器切换到正常运行。 在失效切换前,将立即恢复归档或`pg_xlog`任何可用的WAL, 但不做尝试连接主服务器。
## 25.2.3\. 为备用服务器准备主服务器
在主服务器上设置连续归档到一个备服务器可访问的存档目录, 正如[Section 24.3](#calibre_link-466)所描述的。即使主服务器关掉, 从备服务器应该可以访问这个归档位置。 即它应该驻留在被服务器自身或其它可信赖的服务器, 而不是主服务器。
如果你想使用流复制,在主服务器上设置认证,允许从备用服务器复制连接; 在`pg_hba.conf`提供一个或多个合适项使用数据库字段设置`replication`。 还要在主服务器的配置文件确保设置`max_wal_senders`足够大。
启动备用服务器做一个基准备份,参见[Section 24.3.2](#calibre_link-1632)。
## 25.2.4\. 建立备用服务器
要建立备用服务器,从主服务器恢复基准备份(参阅[Section 24.3.4](#calibre_link-1634))。 在备用服务器的集群数据目录,创建一个恢复命令文件`recovery.conf`, 开启`standby_mode`。设置`restore_command` 为一条从WAL归档复制文件的简单命令。如果为了高可用性目的计划有多个备用服务器, 设置`recovery_target_timeline`为`latest`, 使得备用服务器按照发生故障转移到另一个备用服务器的时间变化。
> **Note:** 不要使用内置在这里描述的备用模式pg_standby或类似的工具。 如果该文件不存在,`restore_command`应该立即返回。 如果必要服务器将再次尝试这个命令。 关于使用工具像pg_standby的详情参阅[Section 25.4](#calibre_link-1282)。
如果你想使用流复制,在`primary_conninfo`填写一个libpq连接串, 其包括主机名(或IP地址)和连接到主服务器需要的其它详细信息。 如果主服务器需要个密码验证,也要在`primary_conninfo`指定所需要的密码。
如果你要建立高可用目的备服务器,设置WAL归档, 像主服务器的连接和身份验证,因为在失效切换后, 备服务器要作为主服务器运行。
如果你使用WAL归档,其大小可以使用[archive_cleanup_command](#calibre_link-1657)这个参数设置最小 ,用来删除那些备服务器不再需要的文件。 专门设计的pg_archivecleanup这个实用程序就是在通常的单备配置里, 使用`archive_cleanup_command`的。参阅[pg_archivecleanup](#calibre_link-1096)。 请注意,如果你使用备份目的归档, 你仍要保留需要恢复的至少最新的基准备份文件, 即使备服务器不再需要。
`recovery.conf`的一个简单例子:
```
standby_mode = 'on'
primary_conninfo = 'host=192.168.1.50 port=5432 user=foo password=foopass'
restore_command = 'cp /path/to/archive/%f %p'
archive_cleanup_command = 'pg_archivecleanup /path/to/archive %r'
```
你可能有任何数目的备服务器,但是如果你用流复制, 确保你在主服务器上设置的`max_wal_senders`足够大允许它们同时连接。
## 25.2.5\. 流复制
与基于文件日志传送相比,流复制允许保持备服务器更新。 备服务器连接主服务器,其产生的流WAL记录到备服务器, 而不需要等待填写WAL文件。
流复制是异步的,参阅[Section 25.2.7](#calibre_link-1439), 在主服务器上提交事务和备用服务器上变化可见之间有一个小的延迟。 这个延迟远小于基于文件日志传送,通常1秒内足够与负载保持。 使用流复制,为减少数据丢失窗口`archive_timeout`不是必要的。
如果使用流复制而不是基于文件连续归档, 你要在主服务器设置`wal_keep_segments`为一个足够大的值以使不太早的回收旧WAL段, 当备服务器可能仍需要它们赶上。如果备服务器落后太多, 需要用一个新基准备份重新初始化。如果你设置一个备服务器可访问的WAL归档, `wal_keep_segments`是不必要的, 作为备服务器总是使用归档来赶上。
要使用流复制,建立一个基于文件的日志传送备服务器描述在[Section 25.2](#calibre_link-1133)。 该步将一个基于文件的日志传送备服务器转为流复制备服务器, 在`recovery.conf`文件中设置`primary_conninfo`指向主服务器。 在主服务器上设置[listen_addresses](#calibre_link-1559)和身份验证选项 (参阅`pg_hba.conf`), 因此备用服务器可以连接到在主服务器的`replication`伪数据库 (参阅[Section 25.2.5.1](#calibre_link-1658))。
系统上支持保持活动的套接字选项, 设置[tcp_keepalives_idle](#calibre_link-1659), [tcp_keepalives_interval](#calibre_link-1660)和 [tcp_keepalives_count](#calibre_link-1661) 帮助主机及时发现断开的连接。
设置备用服务器的最大并发连接数。 (参阅[max_wal_senders](#calibre_link-470)获取更多详细信息)。
当启动了备服务器并且正确设置了`primary_conninfo`, 该备服务器在回放所有可用的WAL文件后,将连接到主服务器。如果成功建立了该连接, 你将在备服务器中看到WAL接收进程,并且在主服务器相应的一个WAL发送进程。
### 25.2.5.1\. 身份验证
复制的访问权限设置是很重要的,所以只有受信任的用户可以读取WAL流, 因为很容易从中提取权限信息。备服务器必须验证作为主服务器的超级用户或者有 `REPLICATION`权限的用户。 建议为复制创建一个带有`REPLICATION`和`LOGIN`权限的专有用户账号。 当`REPLICATION`权限有很高权限时,不允许用户修改主服务器上的任何数据, 其中`SUPERUSER`就是这样的。
由一条`pg_hba.conf`记录指定`replication`在`_database_`字段, 控制客户端的复制验证。例如,如果备服务器是运行在主机IP `192.168.1.100`和复制时超级用户名为`foo`, 管理员可以在主服务器`pg_hba.conf`文件里添加下面行:
```
# Allow the user "foo" from host 192.168.1.100 to connect to the primary
# as a replication standby if the user's password is correctly supplied.
#
# TYPE DATABASE USER ADDRESS METHOD
host replication foo 192.168.1.100/32 md5
```
主服务器的主机名和端口号,连接用户名,和在`recovery.conf`文件指定的密码。 该密码也可以在备服务器的`~/.pgpass`文件里设置。 (在`_database_`字段指定`replication`)。例如, 如果主服务器是运行的主机IP `192.168.1.50`,端口号`5432`, 复制时用户名为`foo`,和密码为`foopass`, 管理员可以在备服务的`recovery.conf`文件里添加下面行:
```
# The standby connects to the primary that is running on host 192.168.1.50
# and port 5432 as the user "foo" whose password is "foopass".
primary_conninfo = 'host=192.168.1.50 port=5432 user=foo password=foopass'
```
### 25.2.5.2\. 监控
流复制的一个重要的健康指标是在主服务器生成的WAL记录数, 而不是在备服务器应用的数量。通过比较在主服务器当前WAL写的位置和备服务器收到 的最后一个WAL位置,就可以计算出这种滞后。 在主服务器上使用`pg_current_xlog_location`和在备服务器上使用 `pg_last_xlog_receive_location`可以分别检索到它们 (参阅[Table 9-60](#calibre_link-1642)和 [Table 9-61](#calibre_link-1049)关于详细信息)。 在备服务器收到最后的WAL位置也会进程状态的WAL接收进程显示, 使用`ps`命令显示(参阅[Section 27.1](#calibre_link-1287)关于详细信息)。
你可以通过 [`pg_stat_replication`](#calibre_link-1440)视图回收WAL发送程序列表。 在`pg_current_xlog_location`和`sent_location`字段之间的不同可能表明 主服务器在大负载下,而备库上`sent_location`和 `pg_last_xlog_receive_location`的不同可能表明网络延迟,或者备库也处于重大负载之下。
## 25.2.6\. Cascading Replication
级联复制功能允许备用服务器接受复制连接和到其他备库的流WAL记录,充当延迟。 这可以用来降低直接连接主库的数量,同时也尽量减少站点间的带宽开销。
同时充当接收器和发送器的待机称为级联 待机状态。更直接地连接到主库的备库作为上游服务器已知, 而备用服务器较远的下游服务器。级联复制不放在数量限制或 下游服务器的安排,虽然每个备库连接到一个上流服务器, 而最终链接到一个单一的主/主服务器。
级联备库不仅仅发送来自主库的WAL记录,而且来自归档的记录。 因此即使一些上流连接的复制连接终止, 连接复制继续往下只要有新的WAL记录可用。
级联复制当前是异步的,同步复制(参阅[Section 25.2.7](#calibre_link-1439))设置当前不影响级联复制。
热备用反馈传播到上游,无论级联配置。
如果上游备用服务器上升成为新主库,下游服务器将继续流向新主库, 如果`recovery_target_timeline`设置为`'latest'`。
使用级联复制,建立连锁备库从而接受复制连接(即设置 [max_wal_senders](#calibre_link-470)和[hot_standby](#calibre_link-1134), 以及配置[host-based authentication](#calibre_link-656))。 在下游备库指向级联备库中你还需要设定`primary_conninfo`。
## 25.2.7\. 同步复制
PostgreSQL流复制缺省是异步的。如果主服务器崩溃,然后一些事务承诺不得不 复制到备用服务器,造成数据丢失。数据丢失量是与故障转移时的复制延迟是成比例的。
同步复制提供确认所有变化已经由事务转移到一个同步备用服务器的能力。 这延伸一个事务提交的耐久性标准。 这种级别的保护是指2-安全复制的计算机科学理论。
当请求同步复制,每次提交的写事务将等待直到确认收到提交已被写入到主库和备用服务器磁盘上的事务日志。 这些数据丢失的可能性是如果主库和备库同一时间遭受崩溃。 这可以提供一个更高层次的耐久性,但如果系统管理员对两个服务器的安置和管理非常谨慎。 等待确认增加用户的信心,在服务器崩溃的情况下更改将不会丢失,而是增加请求事务的响应时间。 最小等待时间是主库到备库的往返时间。
只读事务和事务回滚不需要等待从备用服务器的回复。 子事务提交不等待从备用服务器的响应,只有顶级提交。 长时间运行动作如加载数据或索引建立不等待直到最后提交信息。 所有的两阶段提交的行动需要提交等待,包括准备和提交。
### 25.2.7.1\. 基础配置
一旦流复制已配置,配置同步复制仅需要一个额外的配置步骤: [synchronous_standby_names](#calibre_link-1434)必须设置为 一个非空值。`synchronous_commit`也必须设置为`on`, 但因为这是默认值,通常是没有改变的。 (参见[Section 18.5.1](#calibre_link-1413)和 [Section 18.6.2](#calibre_link-1417))。 这种配置将导致每次提交会等待确认备库书面提交记录到持久存储。 `synchronous_commit`可以由个人用户设置, 所以它可以被配置在配置文件中,特别是 用户或数据库中,或动态的应用程序中, 以保证每个事务的基础上控制耐久性。
一个提交记录已被写入到主库磁盘上,WAL记录随后被发送到待机状态。 每次一批新的WAL数据被写入磁盘时待机发送答复消息, 除非`wal_receiver_status_interval`在待机状态设置为零。 如果待机是第一个匹配的待机, 在主库上指定`synchronous_standby_names`, 从待机状态得到的答复信息将被用于唤醒用户的提交记录已被接收的等待确认。 这些参数允许管理员指定哪些备用服务器应同步备用。 注意,同步的配置复制主要针对主服务器。 命名的备用服务器必须直接连接到主库上;主库并不了解下游待机使用级联复制的服务器。
设置`synchronous_commit`到`remote_write`将 导致每个提交等待确认备库已经收到提交记录并且写入到自己的操作系统, 但不是为了该数据被刷新到磁盘上的备份。 这个设置提供了耐用性较弱保证对比`on`: 在待机状态下可能会失去操作系统崩溃时的数据, 虽然不是PostgreSQL崩溃。 然而,这是在实践中有用的设置,因为它可以减少事务响应时间。 如果主库和备库崩溃,并且主库的数据库同时被破坏了,只能发生数据丢失。
如果要求快速关机,用户将停止等待。然而,作为使用异步复制的时候,服务器将不完全 关闭直到所有WAL记录转移到目前连接的备用服务器。
### 25.2.7.2\. 规划性能
同步复制通常需要仔细规划并且放置备用服务器,确保应用程序执行性能。等待 没有充分利用系统资源,但事务锁继续直到确认转移。作为一个结果, 不小心的使用同步复制会降低数据库应用性能,由于响应时间的增加和更高的竞争。
PostgreSQL允许应用程序开发人员通过复制来指定所需的耐久性水平。这可以 对系统的总体说明,虽然它也可以被指定为特定用户或连接,甚至个别交易。
例如,一个应用程序的任务可能包括:10%的变化是重要的客户资料,而 90%的变化是不太重要的数据,如果它丢失,企业还可以更好生存,比如用户之间的聊天信息。
在应用水平(主库)指定同步复制选项,我们可以为大多数重要的变化提供同步复制 ,没有放缓总工作量体积。对于允许同步复制的高性能应用的效益来说, 应用程序级别的选项是一个重要而实用的工具。
你应该考虑到网络带宽必须大于WAL数据生成率。
### 25.2.7.3\. 高可用性规划
当`synchronous_commit`设置为`on` 或者`remote_write`将等待直到同步备用响应,则进行提交。 如果最后,或只发生待机崩溃,则响应不会发生。
为避免数据丢失最好的办法是确保你不会失去你最后的同步备份。 这可以通过使用`synchronous_standby_names`命名多个 潜在的同步备用实现。 第一个命名的备库将作为同步备库使用。如果第一个失败, 则备用列表将接管同步备用角色。
当一个备库首先依附在主库时,不能正确地同步。 这是`catchup`方式所描述的。 一旦备库和主库之间的滞后达到零,第一次我们将实时状态`流`。 备库被创建后,持续追赶时间可能长。如果备库关闭, 然后追赶时期将随着待机时间长度而增加。 一旦已经达到`流`状态,备库是唯一能够成为同步备用。
如果主库启动而提交等待确认,这些等待事务将被标记为完全提交,一旦主数据库恢复。 没有办法确保在主库崩溃的时候所有备库收到所有优秀的WAL数据。 一些事务可能不会在待机时显示提交,即使他们表现为主库已提交。 我们提供的保障是应用程序将不会接收事务成功提交的明确承认, 直到被备库安全接收WAL数据是已知的。
如果你真的失去了你最后的备用服务器,你应该禁用 `synchronous_standby_names`并且在主服务器 重新加载配置文件。
如果主库是从剩余备用服务器分离的, 你应该故障转移到那些其他剩余备用服务器的最佳人选。
如果你需要重新创建备用服务器,当等待事务时,确保pg_start_backup()和 pg_stop_backup()在带有`synchronous_commit` = `off`的回话中运行, 否则这些请求将永远等待备库出现。
- 前言
- 何为PostgreSQL?
- PostgreSQL简史
- 格式约定
- 更多信息
- 臭虫汇报指导
- I. 教程
- Chapter 1. 从头开始
- 1.1. 安装
- 1.2. 体系基本概念
- 1.3. 创建一个数据库
- 1.4. 访问数据库
- Chapter 2. SQL语言
- 2.1. 介绍
- 2.2. 概念
- 2.3. 创建新表
- 2.4. 向表中添加行
- 2.5. 查询一个表
- 2.6. 在表间连接
- 2.7. 聚集函数
- 2.8. 更新
- 2.9. 删除
- Chapter 3. 高级特性
- 3.1. 介绍
- 3.2. 视图
- 3.3. 外键
- 3.4. 事务
- 3.5. 窗口函数
- 3.6. 继承
- 3.7. 结论
- II. SQL 语言
- Chapter 4. SQL语法
- 4.1. 词法结构
- 4.2. 值表达式
- 4.3. 调用函数
- Chapter 5. 数据定义
- 5.1. 表的基本概念
- 5.2. 缺省值
- 5.3. 约束
- 5.4. 系统字段
- 5.5. 修改表
- 5.6. 权限
- 5.7. 模式
- 5.8. 继承
- 5.9. 分区
- 5.10. 外部数据
- 5.11. 其它数据库对象
- 5.12. 依赖性跟踪
- Chapter 6. 数据操作
- 6.1. 插入数据
- 6.2. 更新数据
- 6.3. 删除数据
- Chapter 7. 查询
- 7.1. 概述
- 7.2. 表表达式
- 7.3. 选择列表
- 7.4. 组合查询
- 7.5. 行排序
- 7.6. LIMIT和OFFSET
- 7.7. VALUES列表
- 7.8. WITH 查询 (通用表表达式)
- Chapter 8. 数据类型
- 8.1. 数值类型
- 8.2. 货币类型
- 8.3. 字符类型
- 8.4. 二进制数据类型
- 8.5. 日期/时间类型
- 8.6. 布尔类型
- 8.7. 枚举类型
- 8.8. 几何类型
- 8.9. 网络地址类型
- 8.10. 位串类型
- 8.11. 文本搜索类型
- 8.12. UUID 类型
- 8.13. XML 类型
- 8.14. JSON 类型
- 8.15. Arrays
- 8.16. 复合类型
- 8.17. 范围类型
- 8.18. 对象标识符类型
- 8.19. 伪类型
- Chapter 9. 函数和操作符
- 9.1. 逻辑操作符
- 9.2. 比较操作符
- 9.3. 数学函数和操作符
- 9.4. 字符串函数和操作符
- 9.5. 二进制字符串函数和操作符
- 9.6. 位串函数和操作符
- 9.7. 模式匹配
- 9.8. 数据类型格式化函数
- 9.9. 时间/日期函数和操作符
- 9.10. 支持枚举函数
- 9.11. 几何函数和操作符
- 9.12. 网络地址函数和操作符
- 9.13. 文本检索函数和操作符
- 9.14. XML 函数
- 9.15. JSON 函数和操作符
- 9.16. 序列操作函数
- 9.17. 条件表达式
- 9.18. 数组函数和操作符
- 9.19. 范围函数和操作符
- 9.20. 聚集函数
- 9.21. 窗口函数
- 9.22. 子查询表达式
- 9.23. 行和数组比较
- 9.24. 返回集合的函数
- 9.25. 系统信息函数
- 9.26. 系统管理函数
- 9.27. 触发器函数
- 9.28. 事件触发函数
- Chapter 10. 类型转换
- 10.1. 概述
- 10.2. 操作符
- 10.3. 函数
- 10.4. 值存储
- 10.5. UNION, CASE 和相关构造
- Chapter 11. 索引
- 11.1. 介绍
- 11.2. 索引类型
- 11.3. 多字段索引
- 11.4. 索引和ORDER BY
- 11.5. 组合多个索引
- 11.6. 唯一索引
- 11.7. 表达式上的索引
- 11.8. 部分索引
- 11.9. 操作符类和操作符族
- 11.10. 索引和排序
- 11.11. 检查索引的使用
- Chapter 12. 全文检索
- 12.1. 介绍
- 12.2. 表和索引
- 12.3. 控制文本搜索
- 12.4. 附加功能
- 12.5. 解析器
- 12.6. 词典
- 12.7. 配置实例
- 12.8. 测试和调试文本搜索
- 12.9. GiST和GIN索引类型
- 12.10. psql支持
- 12.11. 限制
- 12.12. 来自8.3之前文本搜索的迁移
- Chapter 13. 并发控制
- 13.1. 介绍
- 13.2. 事务隔离
- 13.3. 明确锁定
- 13.4. 应用层数据完整性检查
- 13.5. 锁和索引
- Chapter 14. 性能提升技巧
- 14.1. 使用EXPLAIN
- 14.2. 规划器使用的统计信息
- 14.3. 用明确的JOIN控制规划器
- 14.4. 向数据库中添加记录
- 14.5. 非持久性设置
- III. 服务器管理
- Chapter 15. 源码安装
- 15.1. 简版
- 15.2. 要求
- 15.3. 获取源码
- 15.4. 安装过程
- 15.5. 安装后设置
- 15.6. 支持平台
- 15.7. 特定平台注意事项
- Chapter 16. Windows下用源代码安装
- 16.1. 用Visual C++或Microsoft Windows SDK编译
- 16.2. 用Visual C++或 Borland C++编译 libpq
- Chapter 17. 服务器设置和操作
- 17.1. PostgreSQL用户账户
- 17.2. 创建数据库集群
- 17.3. 启动数据库服务器
- 17.4. 管理内核资源
- 17.5. 关闭服务器
- 17.6. 升级一个 PostgreSQL 集群
- 17.7. 防止服务器欺骗
- 17.8. 加密选项
- 17.9. 用 SSL 进行安全的 TCP/IP 连接
- 17.10. 用SSH隧道进行安全 TCP/IP 连接
- 17.11. 在Windows上注册事件日志
- Chapter 18. 服务器配置
- 18.1. 设置参数
- 18.2. 文件位置
- 18.3. 连接和认证
- 18.4. 资源消耗
- 18.5. 预写式日志
- 18.6. 复制
- 18.7. 查询规划
- 18.8. 错误报告和日志
- 18.9. 运行时统计
- 18.10. 自动清理
- 18.11. 客户端连接缺省
- 18.12. 锁管理
- 18.13. 版本和平台兼容性
- 18.14. Error Handling
- 18.15. 预置选项
- 18.16. 自定义选项
- 18.17. 开发人员选项
- 18.18. 短选项
- Chapter 19. 用户认证
- 19.1. pg_hba.conf文件
- 19.2. 用户名映射
- 19.3. 认证方法
- 19.4. 用户认证
- Chapter 20. 数据库角色
- 20.1. 数据库角色
- 20.2. 角色属性
- 20.3. 角色成员
- 20.4. 函数和触发器安全
- Chapter 21. 管理数据库
- 21.1. 概述
- 21.2. 创建一个数据库
- 21.3. 模板数据库
- 21.4. 数据库配置
- 21.5. 删除数据库
- 21.6. 表空间
- Chapter 22. 区域
- 22.1. 区域支持
- 22.2. 排序规则支持
- 22.3. 字符集支持
- Chapter 23. 日常数据库维护工作
- 23.1. 日常清理
- 23.2. 经常重建索引
- 23.3. 日志文件维护
- Chapter 24. 备份与恢复
- 24.1. SQL转储
- 24.2. 文件系统级别备份
- 24.3. 在线备份以及即时恢复(PITR)
- Chapter 25. 高可用性与负载均衡,复制
- 25.1. 不同解决方案的比较
- 25.2. 日志传送备份服务器
- 25.3. 失效切换
- 25.4. 日志传送的替代方法
- 25.5. 热备
- Chapter 26. 恢复配置
- 26.1. 归档恢复设置
- 26.2. 恢复目标设置
- 26.3. 备用服务器设置
- Chapter 27. 监控数据库的活动
- 27.1. 标准Unix工具
- 27.2. 统计收集器
- 27.3. 查看锁
- 27.4. 动态跟踪
- Chapter 28. 监控磁盘使用情况
- 28.1. 判断磁盘的使用量
- 28.2. 磁盘满导致的失效
- Chapter 29. 可靠性和预写式日志
- 29.1. 可靠性
- 29.2. 预写式日志(WAL)
- 29.3. 异步提交
- 29.4. WAL 配置
- 29.5. WAL 内部
- Chapter 30. 回归测试
- 30.1. 运行测试
- 30.2. 测试评估
- 30.3. 平台相关的比较文件
- 30.4. 测试覆盖率检查
- IV. 客户端接口
- Chapter 31. libpq - C 库
- 31.1. 数据库连接控制函数
- 31.2. 连接状态函数
- 31.3. 命令执行函数
- 31.4. 异步命令处理
- 31.5. 逐行检索查询结果
- 31.6. 取消正在处理的查询
- 31.7. 捷径接口
- 31.8. 异步通知
- 31.9. 与COPY命令相关的函数
- 31.10. 控制函数
- 31.11. 各种函数
- 31.12. 注意信息处理
- 31.13. 事件系统
- 31.14. 环境变量
- 31.15. 口令文件
- 31.16. 连接服务的文件
- 31.17. LDAP查找连接参数
- 31.18. SSL 支持
- 31.19. 在多线程程序里的行为
- 31.20. 制作libpq程序
- 31.21. 例子程序
- Chapter 32. 大对象
- 32.1. 介绍
- 32.2. 实现特点
- 32.3. 客户端接口
- 32.4. 服务器端函数
- 32.5. 例子程序
- Chapter 33. ECPG - 在C中嵌入SQL
- 33.1. 概念
- 33.2. 管理数据库连接
- 33.3. 运行SQL命令
- 33.4. 使用宿主变量
- 33.5. 动态SQL
- 33.6. pgtypes 库
- 33.7. 使用描述符范围
- 33.8. 错误处理
- 33.9. 预处理器指令
- 33.10. 处理嵌入的SQL程序
- 33.11. 库函数
- 33.12. 大对象
- 33.13. C++应用程序
- 33.14. 嵌入的SQL命令
- ALLOCATE DESCRIPTOR
- CONNECT
- DEALLOCATE DESCRIPTOR
- DECLARE
- DESCRIBE
- DISCONNECT
- EXECUTE IMMEDIATE
- GET DESCRIPTOR
- OPEN
- PREPARE
- SET AUTOCOMMIT
- SET CONNECTION
- SET DESCRIPTOR
- TYPE
- VAR
- WHENEVER
- 33.15. Informix兼容模式
- 33.16. 内部
- Chapter 34. 信息模式
- 34.1. 关于这个模式
- 34.2. 数据类型
- 34.3. information_schema_catalog_name
- 34.4. administrable_role_authorizations
- 34.5. applicable_roles
- 34.6. attributes
- 34.7. character_sets
- 34.8. check_constraint_routine_usage
- 34.9. check_constraints
- 34.10. collations
- 34.11. collation_character_set_applicability
- 34.12. column_domain_usage
- 34.13. column_options
- 34.14. column_privileges
- 34.15. column_udt_usage
- 34.16. columns
- 34.17. constraint_column_usage
- 34.18. constraint_table_usage
- 34.19. data_type_privileges
- 34.20. domain_constraints
- 34.21. domain_udt_usage
- 34.22. domains
- 34.23. element_types
- 34.24. enabled_roles
- 34.25. foreign_data_wrapper_options
- 34.26. foreign_data_wrappers
- 34.27. foreign_server_options
- 34.28. foreign_servers
- 34.29. foreign_table_options
- 34.30. foreign_tables
- 34.31. key_column_usage
- 34.32. parameters
- 34.33. referential_constraints
- 34.34. role_column_grants
- 34.35. role_routine_grants
- 34.36. role_table_grants
- 34.37. role_udt_grants
- 34.38. role_usage_grants
- 34.39. routine_privileges
- 34.40. routines
- 34.41. schemata
- 34.42. sequences
- 34.43. sql_features
- 34.44. sql_implementation_info
- 34.45. sql_languages
- 34.46. sql_packages
- 34.47. sql_parts
- 34.48. sql_sizing
- 34.49. sql_sizing_profiles
- 34.50. table_constraints
- 34.51. table_privileges
- 34.52. tables
- 34.53. triggered_update_columns
- 34.54. triggers
- 34.55. udt_privileges
- 34.56. usage_privileges
- 34.57. user_defined_types
- 34.58. user_mapping_options
- 34.59. user_mappings
- 34.60. view_column_usage
- 34.61. view_routine_usage
- 34.62. view_table_usage
- 34.63. views
- V. 服务器端编程
- Chapter 35. 扩展SQL
- 35.1. 扩展性是如何实现的
- 35.2. PostgreSQL类型系统
- 35.3. 用户定义的函数
- 35.4. 查询语言(SQL)函数
- 35.5. 函数重载
- 35.6. 函数易失性范畴
- 35.7. 过程语言函数
- 35.8. 内部函数
- 35.9. C-语言函数
- 35.10. 用户定义聚集
- 35.11. 用户定义类型
- 35.12. 用户定义操作符
- 35.13. 操作符优化信息
- 35.14. 扩展索引接口
- 35.15. 包装相关对象到一个扩展
- 35.16. 扩展基础设施建设
- Chapter 36. 触发器
- 36.1. 触发器行为概述
- 36.2. 数据改变的可视性
- 36.3. 用C写触发器
- 36.4. 一个完整的触发器例子
- Chapter 37. 事件触发器
- 37.1. 事件触发器行为的概述
- 37.2. 事件触发器触发矩阵
- 37.3. 用C编写事件触发器函数
- 37.4. 一个完整的事件触发器的例子
- Chapter 38. 规则系统
- 38.1. 查询树
- 38.2. 视图和规则系统
- 38.3. 物化视图
- 38.4. 在 INSERT, UPDATE, 和 DELETE上的规则
- 38.5. 规则和权限
- 38.6. 规则和命令状态
- 38.7. 规则与触发器的比较
- Chapter 39. 过程语言
- 39.1. 安装过程语言
- Chapter 40. PL/pgSQL - SQL过程语言
- 40.1. 概述
- 40.2. PL/pgSQL的结构
- 40.3. 声明
- 40.4. 表达式
- 40.5. 基本语句
- 40.6. 控制结构
- 40.7. 游标
- 40.8. 错误和消息
- 40.9. 触发器过程
- 40.10. 在后台下的PL/pgSQL
- 40.11. 开发PL/pgSQL的一些提示
- 40.12. 从Oracle PL/SQL进行移植
- Chapter 41. PL/Tcl - Tcl 过程语言
- 41.1. 概述
- 41.2. PL/Tcl 函数和参数
- 41.3. PL/Tcl里的数据值
- 41.4. PL/Tcl里的全局量
- 41.5. 在PL/Tcl里访问数据库
- 41.6. PL/Tcl里的触发器过程
- 41.7. 模块和unknown的命令
- 41.8. Tcl 过程名字
- Chapter 42. PL/Perl - Perl 过程语言
- 42.1. PL/Perl 函数和参数
- 42.2. PL/Perl里的数据值
- 42.3. 内置函数
- 42.4. PL/Perl里的全局变量
- 42.5. 可信的和不可信的 PL/Perl
- 42.6. PL/Perl 触发器
- 42.7. 后台PL/Perl
- Chapter 43. PL/Python - Python 过程语言
- 43.1. Python 2 vs. Python 3
- 43.2. PL/Python Functions
- 43.3. Data Values
- 43.4. Sharing Data
- 43.5. Anonymous Code Blocks
- 43.6. Trigger Functions
- 43.7. Database Access
- 43.8. Explicit Subtransactions
- 43.9. Utility Functions
- 43.10. Environment Variables
- Chapter 44. 服务器编程接口
- 44.1. 接口函数
- SPI_connect
- SPI_finish
- SPI_push
- SPI_pop
- SPI_execute
- SPI_exec
- SPI_execute_with_args
- SPI_prepare
- SPI_prepare_cursor
- SPI_prepare_params
- SPI_getargcount
- SPI_getargtypeid
- SPI_is_cursor_plan
- SPI_execute_plan
- SPI_execute_plan_with_paramlist
- SPI_execp
- SPI_cursor_open
- SPI_cursor_open_with_args
- SPI_cursor_open_with_paramlist
- SPI_cursor_find
- SPI_cursor_fetch
- SPI_cursor_move
- SPI_scroll_cursor_fetch
- SPI_scroll_cursor_move
- SPI_cursor_close
- SPI_keepplan
- SPI_saveplan
- 44.2. 接口支持函数
- SPI_fname
- SPI_fnumber
- SPI_getvalue
- SPI_getbinval
- SPI_gettype
- SPI_gettypeid
- SPI_getrelname
- SPI_getnspname
- 44.3. 内存管理
- SPI_palloc
- SPI_repalloc
- SPI_pfree
- SPI_copytuple
- SPI_returntuple
- SPI_modifytuple
- SPI_freetuple
- SPI_freetuptable
- SPI_freeplan
- 44.4. 数据改变的可视性
- 44.5. 例子
- Chapter 45. 后台工作进程
- VI. 参考手册
- I. SQL 命令
- ABORT
- ALTER AGGREGATE
- ALTER COLLATION
- ALTER CONVERSION
- ALTER DATABASE
- ALTER DEFAULT PRIVILEGES
- ALTER DOMAIN
- ALTER EXTENSION
- ALTER EVENT TRIGGER
- ALTER FOREIGN DATA WRAPPER
- ALTER FOREIGN TABLE
- ALTER FUNCTION
- ALTER GROUP
- ALTER INDEX
- ALTER LANGUAGE
- ALTER LARGE OBJECT
- ALTER MATERIALIZED VIEW
- ALTER OPERATOR
- ALTER OPERATOR CLASS
- ALTER OPERATOR FAMILY
- ALTER ROLE
- ALTER RULE
- ALTER SCHEMA
- ALTER SEQUENCE
- ALTER SERVER
- ALTER TABLE
- ALTER TABLESPACE
- ALTER TEXT SEARCH CONFIGURATION
- ALTER TEXT SEARCH DICTIONARY
- ALTER TEXT SEARCH PARSER
- ALTER TEXT SEARCH TEMPLATE
- ALTER TRIGGER
- ALTER TYPE
- ALTER USER
- ALTER USER MAPPING
- ALTER VIEW
- ANALYZE
- BEGIN
- CHECKPOINT
- CLOSE
- CLUSTER
- COMMENT
- COMMIT
- COMMIT PREPARED
- COPY
- CREATE AGGREGATE
- CREATE CAST
- CREATE COLLATION
- CREATE CONVERSION
- CREATE DATABASE
- CREATE DOMAIN
- CREATE EXTENSION
- CREATE EVENT TRIGGER
- CREATE FOREIGN DATA WRAPPER
- CREATE FOREIGN TABLE
- CREATE FUNCTION
- CREATE GROUP
- CREATE INDEX
- CREATE LANGUAGE
- CREATE MATERIALIZED VIEW
- CREATE OPERATOR
- CREATE OPERATOR CLASS
- CREATE OPERATOR FAMILY
- CREATE ROLE
- CREATE RULE
- CREATE SCHEMA
- CREATE SEQUENCE
- CREATE SERVER
- CREATE TABLE
- CREATE TABLE AS
- CREATE TABLESPACE
- CREATE TEXT SEARCH CONFIGURATION
- CREATE TEXT SEARCH DICTIONARY
- CREATE TEXT SEARCH PARSER
- CREATE TEXT SEARCH TEMPLATE
- CREATE TRIGGER
- CREATE TYPE
- CREATE USER
- CREATE USER MAPPING
- CREATE VIEW
- DEALLOCATE
- DECLARE
- DELETE
- DISCARD
- DO
- DROP AGGREGATE
- DROP CAST
- DROP COLLATION
- DROP CONVERSION
- DROP DATABASE
- DROP DOMAIN
- DROP EXTENSION
- DROP EVENT TRIGGER
- DROP FOREIGN DATA WRAPPER
- DROP FOREIGN TABLE
- DROP FUNCTION
- DROP GROUP
- DROP INDEX
- DROP LANGUAGE
- DROP MATERIALIZED VIEW
- DROP OPERATOR
- DROP OPERATOR CLASS
- DROP OPERATOR FAMILY
- DROP OWNED
- DROP ROLE
- DROP RULE
- DROP SCHEMA
- DROP SEQUENCE
- DROP SERVER
- DROP TABLE
- DROP TABLESPACE
- DROP TEXT SEARCH CONFIGURATION
- DROP TEXT SEARCH DICTIONARY
- DROP TEXT SEARCH PARSER
- DROP TEXT SEARCH TEMPLATE
- DROP TRIGGER
- DROP TYPE
- DROP USER
- DROP USER MAPPING
- DROP VIEW
- END
- EXECUTE
- EXPLAIN
- FETCH
- GRANT
- INSERT
- LISTEN
- LOAD
- LOCK
- MOVE
- NOTIFY
- PREPARE
- PREPARE TRANSACTION
- REASSIGN OWNED
- REFRESH MATERIALIZED VIEW
- REINDEX
- RELEASE SAVEPOINT
- RESET
- REVOKE
- ROLLBACK
- ROLLBACK PREPARED
- ROLLBACK TO SAVEPOINT
- SAVEPOINT
- SECURITY LABEL
- SELECT
- SELECT INTO
- SET
- SET CONSTRAINTS
- SET ROLE
- SET SESSION AUTHORIZATION
- SET TRANSACTION
- SHOW
- START TRANSACTION
- TRUNCATE
- UNLISTEN
- UPDATE
- VACUUM
- VALUES
- II. PostgreSQL 客户端应用程序
- clusterdb
- createdb
- createlang
- createuser
- dropdb
- droplang
- dropuser
- ecpg
- pg_basebackup
- pg_config
- pg_dump
- pg_dumpall
- pg_isready
- pg_receivexlog
- pg_restore
- psql
- reindexdb
- vacuumdb
- III. PostgreSQL 服务器应用程序
- initdb
- pg_controldata
- pg_ctl
- pg_resetxlog
- postgres
- postmaster
- VII. 内部
- Chapter 46. PostgreSQL内部概述
- 46.1. 查询经过的路径
- 46.2. 连接是如何建立起来的
- 46.3. 分析器阶段
- 46.4. PostgreSQL规则系统
- 46.5. 规划器/优化器
- 46.6. 执行器
- Chapter 47. 系统表
- 47.1. 概述
- 47.2. pg_aggregate
- 47.3. pg_am
- 47.4. pg_amop
- 47.5. pg_amproc
- 47.6. pg_attrdef
- 47.7. pg_attribute
- 47.8. pg_authid
- 47.9. pg_auth_members
- 47.10. pg_cast
- 47.11. pg_class
- 47.12. pg_event_trigger
- 47.13. pg_constraint
- 47.14. pg_collation
- 47.15. pg_conversion
- 47.16. pg_database
- 47.17. pg_db_role_setting
- 47.18. pg_default_acl
- 47.19. pg_depend
- 47.20. pg_description
- 47.21. pg_enum
- 47.22. pg_extension
- 47.23. pg_foreign_data_wrapper
- 47.24. pg_foreign_server
- 47.25. pg_foreign_table
- 47.26. pg_index
- 47.27. pg_inherits
- 47.28. pg_language
- 47.29. pg_largeobject
- 47.30. pg_largeobject_metadata
- 47.31. pg_namespace
- 47.32. pg_opclass
- 47.33. pg_operator
- 47.34. pg_opfamily
- 47.35. pg_pltemplate
- 47.36. pg_proc
- 47.37. pg_range
- 47.38. pg_rewrite
- 47.39. pg_seclabel
- 47.40. pg_shdepend
- 47.41. pg_shdescription
- 47.42. pg_shseclabel
- 47.43. pg_statistic
- 47.44. pg_tablespace
- 47.45. pg_trigger
- 47.46. pg_ts_config
- 47.47. pg_ts_config_map
- 47.48. pg_ts_dict
- 47.49. pg_ts_parser
- 47.50. pg_ts_template
- 47.51. pg_type
- 47.52. pg_user_mapping
- 47.53. 系统视图
- 47.54. pg_available_extensions
- 47.55. pg_available_extension_versions
- 47.56. pg_cursors
- 47.57. pg_group
- 47.58. pg_indexes
- 47.59. pg_locks
- 47.60. pg_matviews
- 47.61. pg_prepared_statements
- 47.62. pg_prepared_xacts
- 47.63. pg_roles
- 47.64. pg_rules
- 47.65. pg_seclabels
- 47.66. pg_settings
- 47.67. pg_shadow
- 47.68. pg_stats
- 47.69. pg_tables
- 47.70. pg_timezone_abbrevs
- 47.71. pg_timezone_names
- 47.72. pg_user
- 47.73. pg_user_mappings
- 47.74. pg_views
- Chapter 48. 前/后端协议
- 48.1. 概要
- 48.2. 消息流
- 48.3. 流复制协议
- 48.4. 消息数据类型
- 48.5. 消息格式
- 48.6. 错误和通知消息字段
- 48.7. 自协议 2.0 以来的变化的概述
- Chapter 49. PostgreSQL 编码约定
- 49.1. 格式
- 49.2. 报告服务器里的错误
- 49.3. 错误消息风格指导
- Chapter 50. 本地语言支持
- 50.1. 寄语翻译家
- 50.2. 寄语程序员
- Chapter 51. 书写一个过程语言处理器
- Chapter 52. 写一个外数据包
- 52.1. 外数据封装函数
- 52.2. 外数据封装回调程序
- 52.3. 外数据封装辅助函数
- 52.4. 外数据封装查询规划
- Chapter 53. 基因查询优化器
- 53.1. 作为复杂优化问题的查询处理
- 53.2. 基因算法
- 53.3. PostgreSQL 里的基因查询优化(GEQO)
- 53.4. 进一步阅读
- Chapter 54. 索引访问方法接口定义
- 54.1. 索引的系统表记录
- 54.2. 索引访问方法函数
- 54.3. 索引扫描
- 54.4. 索引锁的考量
- 54.5. 索引唯一性检查
- 54.6. 索引开销估计函数
- Chapter 55. GiST索引
- 55.1. 介绍
- 55.2. 扩展性
- 55.3. 实现
- 55.4. 例
- Chapter 56. SP-GiST索引
- 56.1. 介绍
- 56.2. 扩展性
- 56.3. 实现
- 56.4. 例
- Chapter 57. GIN索引
- 57.1. 介绍
- 57.2. 扩展性
- 57.3. 实现
- 57.4. GIN提示与技巧
- 57.5. 限制
- 57.6. 例子
- Chapter 58. 数据库物理存储
- 58.1. 数据库文件布局
- 58.2. TOAST
- 58.3. 自由空间映射
- 58.4. 可见映射
- 58.5. 初始化分支
- 58.6. 数据库分页文件
- Chapter 59. BKI后端接口
- 59.1. BKI 文件格式
- 59.2. BKI 命令
- 59.3. 系统初始化的BKI文件的结构
- 59.4. 例子
- Chapter 60. 规划器如何使用统计信息
- 60.1. 行预期的例子
- VIII. 附录
- Appendix A. PostgreSQL 错误代码
- Appendix B. 日期/时间支持
- B.1. 日期/时间输入解析
- B.2. 日期/时间关键字
- B.3. 日期/时间配置文件
- B.4. 单位历史
- Appendix C. SQL关键字
- Appendix D. SQL兼容性
- D.1. 支持的特性
- D.2. 不支持的特性
- Appendix E. 版本说明
- E.1. 版本 9.3.1
- E.2. 版本 9.3
- E.3. 版本9.2.5
- E.4. 版本9.2.4
- E.5. 版本9.2.3
- E.6. 版本9.2.2
- E.7. 版本9.2.1
- E.8. 版本9.2
- E.9. 发布9.1.10
- E.10. 发布9.1.9
- E.11. 发布9.1.8
- E.12. 发布9.1.7
- E.13. 发布9.1.6
- E.14. 发布9.1.5
- E.15. 发布9.1.4
- E.16. 发布9.1.3
- E.17. 发布9.1.2
- E.18. 发布9.1.1
- E.19. 发布9.1
- E.20. 版本 9.0.14
- E.21. 版本 9.0.13
- E.22. 版本 9.0.12
- E.23. 版本 9.0.11
- E.24. 版本 9.0.10
- E.25. 版本 9.0.9
- E.26. 版本 9.0.8
- E.27. 版本 9.0.7
- E.28. 版本 9.0.6
- E.29. 版本 9.0.5
- E.30. 版本 9.0.4
- E.31. 版本 9.0.3
- E.32. 版本 9.0.2
- E.33. 版本 9.0.1
- E.34. 版本 9.0
- E.35. 发布8.4.18
- E.36. 发布8.4.17
- E.37. 发布8.4.16
- E.38. 发布8.4.15
- E.39. 发布8.4.14
- E.40. 发布8.4.13
- E.41. 发布8.4.12
- E.42. 发布8.4.11
- E.43. 发布8.4.10
- E.44. 发布8.4.9
- E.45. 发布8.4.8
- E.46. 发布8.4.7
- E.47. 发布8.4.6
- E.48. 发布8.4.5
- E.49. 发布8.4.4
- E.50. 发布8.4.3
- E.51. 发布8.4.2
- E.52. 发布8.4.1
- E.53. 发布8.4
- E.54. 发布8.3.23
- E.55. 发布8.3.22
- E.56. 发布8.3.21
- E.57. 发布8.3.20
- E.58. 发布8.3.19
- E.59. 发布8.3.18
- E.60. 发布8.3.17
- E.61. 发布8.3.16
- E.62. 发布8.3.15
- E.63. 发布8.3.14
- E.64. 发布8.3.13
- E.65. 发布8.3.12
- E.66. 发布8.3.11
- E.67. 发布8.3.10
- E.68. 发布8.3.9
- E.69. 发布8.3.8
- E.70. 发布8.3.7
- E.71. 发布8.3.6
- E.72. 发布8.3.5
- E.73. 发布8.3.4
- E.74. 发布8.3.3
- E.75. 发布8.3.2
- E.76. 发布8.3.1
- E.77. 发布8.3
- E.78. 版本 8.2.23
- E.79. 版本 8.2.22
- E.80. 版本 8.2.21
- E.81. 版本 8.2.20
- E.82. 版本 8.2.19
- E.83. 版本 8.2.18
- E.84. 版本 8.2.17
- E.85. 版本 8.2.16
- E.86. 版本 8.2.15
- E.87. 版本 8.2.14
- E.88. 版本 8.2.13
- E.89. 版本 8.2.12
- E.90. 版本 8.2.11
- E.91. 版本 8.2.10
- E.92. 版本 8.2.9
- E.93. 版本 8.2.8
- E.94. 版本 8.2.7
- E.95. 版本 8.2.6
- E.96. 版本 8.2.5
- E.97. 版本 8.2.4
- E.98. 版本 8.2.3
- E.99. 版本 8.2.2
- E.100. 版本 8.2.1
- E.101. 版本 8.2
- E.102. 版本 8.1.23
- E.103. 版本 8.1.22
- E.104. 版本 8.1.21
- E.105. 版本 8.1.20
- E.106. 版本 8.1.19
- E.107. 版本 8.1.18
- E.108. 版本 8.1.17
- E.109. 版本 8.1.16
- E.110. 版本 8.1.5
- E.111. 版本 8.1.14
- E.112. 版本 8.1.13
- E.113. 版本 8.1.12
- E.114. 版本 8.1.11
- E.115. 版本 8.1.10
- E.116. 版本 8.1.9
- E.117. 版本 8.1.8
- E.118. 版本 8.1.7
- E.119. 版本 8.1.6
- E.120. 版本 8.1.5
- E.121. 版本 8.1.4
- E.122. 版本 8.1.3
- E.123. 版本 8.1.2
- E.124. 版本 8.1.1
- E.125. 版本 8.1
- E.126. 版本 8.0.26
- E.127. 版本 8.0.25
- E.128. 版本 8.0.24
- E.129. 版本 8.0.23
- E.130. 版本 8.0.22
- E.131. 版本 8.0.21
- E.132. 版本 8.0.20
- E.133. 版本 8.0.19
- E.134. 版本 8.0.18
- E.135. 版本 8.0.17
- E.136. 版本 8.0.16
- E.137. 版本 8.0.15
- E.138. 版本 8.0.14
- E.139. 版本 8.0.13
- E.140. 版本 8.0.12
- E.141. 版本 8.0.11
- E.142. 版本 8.0.10
- E.143. 版本 8.0.9
- E.144. 版本 8.0.8
- E.145. 版本 8.0.7
- E.146. 版本 8.0.6
- E.147. 版本 8.0.5
- E.148. 版本 8.0.4
- E.149. 版本 8.0.3
- E.150. 版本 8.0.2
- E.151. 版本 8.0.1
- E.152. 版本 8.0.0
- E.153. 版本 7.4.30
- E.154. 版本 7.4.29
- E.155. 版本 7.4.28
- E.156. 版本 7.4.27
- E.157. 版本 7.4.26
- E.158. 版本 7.4.25
- E.159. 版本 7.4.24
- E.160. 版本 7.4.23
- E.161. 版本 7.4.22
- E.162. 版本 7.4.21
- E.163. 版本 7.4.20
- E.164. 版本 7.4.19
- E.165. 版本 7.4.18
- E.166. 版本 7.4.17
- E.167. 版本 7.4.16
- E.168. 版本 7.4.15
- E.169. 版本 7.4.14
- E.170. 版本 7.4.13
- E.171. 版本 7.4.12
- E.172. 版本 7.4.11
- E.173. 版本 7.4.10
- E.174. 版本 7.4.9
- E.175. 版本 7.4.8
- E.176. 版本 7.4.7
- E.177. 版本 7.4.6
- E.178. 版本 7.4.3
- E.179. 版本 7.4.4
- E.180. 版本 7.4.3
- E.181. 版本 7.4.2
- E.182. 版本 7.4.1
- E.183. 版本 7.4
- E.184. 版本 7.3.21
- E.185. 版本 7.3.20
- E.186. 版本 7.3.19
- E.187. 版本 7.3.18
- E.188. 版本 7.3.17
- E.189. 版本 7.3.16
- E.190. 版本 7.3.15
- E.191. 版本 7.3.14
- E.192. 版本 7.3.13
- E.193. 版本 7.3.12
- E.194. 版本 7.3.11
- E.195. 版本 7.3.10
- E.196. 版本 7.3.9
- E.197. 版本 7.3.8
- E.198. 版本 7.3.7
- E.199. 版本 7.3.6
- E.200. 版本 7.3.5
- E.201. 版本 7.3.4
- E.202. 版本 7.3.3
- E.203. 版本 7.3.2
- E.204. 版本 7.3.1
- E.205. 版本 7.3
- E.206. 版本 7.2.8
- E.207. 版本 7.2.7
- E.208. 版本 7.2.6
- E.209. 版本 7.2.5
- E.210. 版本 7.2.4
- E.211. 版本 7.2.3
- E.212. 版本 7.2.2
- E.213. 版本 7.2.1
- E.214. 版本 7.2
- E.215. 版本 7.1.3
- E.216. 版本 7.1.2
- E.217. 版本 7.1.1
- E.218. 版本 7.1
- E.219. 版本 7.0.3
- E.220. 版本 7.0.2
- E.221. 版本 7.0.1
- E.222. 版本 7.0
- E.223. 版本 6.5.3
- E.224. 版本 6.5.2
- E.225. 版本 6.5.1
- E.226. 版本 6.5
- E.227. 版本 6.4.2
- E.228. 版本 6.4.1
- E.229. 版本 6.4
- E.230. 版本 6.3.2
- E.231. 版本 6.3.1
- E.232. 版本 6.3
- E.233. 版本 6.2.1
- E.234. 版本 6.2
- E.235. 版本 6.1.1
- E.236. 版本 6.1
- E.237. 版本 6.0
- E.238. 版本 1.09
- E.239. 版本 1.02
- E.240. 版本 1.01
- E.241. 版本 1.0
- E.242. Postgres95 版本 0.03
- E.243. Postgres95 版本 0.02
- E.244. Postgres95 版本 0.01
- Appendix F. 额外提供的模块
- F.1. adminpack
- F.2. auth_delay
- F.3. auto_explain
- F.4. btree_gin
- F.5. btree_gist
- F.6. chkpass
- F.7. citext
- F.8. cube
- F.9. dblink
- dblink_connect
- dblink_connect_u
- dblink_disconnect
- dblink
- dblink_exec
- dblink_open
- dblink_fetch
- dblink_close
- dblink_get_connections
- dblink_error_message
- dblink_send_query
- dblink_is_busy
- dblink_get_notify
- dblink_get_result
- dblink_cancel_query
- dblink_get_pkey
- dblink_build_sql_insert
- dblink_build_sql_delete
- dblink_build_sql_update
- F.10. dict_int
- F.11. dict_xsyn
- F.12. dummy_seclabel
- F.13. earthdistance
- F.14. file_fdw
- F.15. fuzzystrmatch
- F.16. hstore
- F.17. intagg
- F.18. intarray
- F.19. isn
- F.20. lo
- F.21. ltree
- F.22. pageinspect
- F.23. passwordcheck
- F.24. pg_buffercache
- F.25. pgcrypto
- F.26. pg_freespacemap
- F.27. pgrowlocks
- F.28. pg_stat_statements
- F.29. pgstattuple
- F.30. pg_trgm
- F.31. postgres_fdw
- F.32. seg
- F.33. sepgsql
- F.34. spi
- F.35. sslinfo
- F.36. tablefunc
- F.37. tcn
- F.38. test_parser
- F.39. tsearch2
- F.40. unaccent
- F.41. uuid-ossp
- F.42. xml2
- Appendix G. 额外提供的程序
- G.1. 客户端应用程序
- oid2name
- pgbench
- vacuumlo
- G.2. 服务器端应用程序
- pg_archivecleanup
- pg_standby
- pg_test_fsync
- pg_test_timing
- pg_upgrade
- pg_xlogdump
- Appendix H. 外部项目
- H.1. 客户端接口
- H.2. 管理工具
- H.3. 过程语言
- H.4. 扩展
- Appendix I. 源代码库
- I.1. 获得源代码通过Git
- Appendix J. 文档
- J.1. DocBook
- J.2. 工具集
- J.3. 制作文档
- J.4. 文档写作
- J.5. 风格指导
- Appendix K. 首字母缩略词
- 参考书目
- Index