# 16.1\. 用Visual C++或Microsoft Windows SDK编译
PostgreSQL可以使用微软的Visual C++编译器套件来编译。 这些编译器可以是Visual Studio, Visual Studio Express或者某些版本的Microsoft Windows SDK。 如果没有安装Visual Studio的环境, 最简单的方法是使用Windows SDK 7.1或者Visual Studio Express 2012 for Windows Desktop中的编译器, 它们都可以从微软官网免费下载。
PostgreSQL支持从Visual Studio 2005到Visual Studio 2012(包括精简版)的编译器, 以及6.0到7.1版本的独立的Windows SDK编译器。 64位的PostgreSQL只支持6.0a到7.1版本的Microsoft Windows SDK和Visual Studio 2008及其以上版本。
用Visual C++或Platform SDK编译的工具在`src/tools/msvc`目录下。 编译时,确保系统路径下没有包含MinGW或Cygwin的工具,同时所需要的Visual C++工具在系统路径下是可用的。 在Visual Studio中,启动Visual Studio Command Prompt。 如果需要编译64位的版本,使用64位版本的命令,反之亦然。在Microsoft Windows SDK中, 从开始菜单中SDK下的列表启动CMD shell。在最新版的SDK中, 你可以使用`setenv`等命令来更改目标的CPU架构,编译类型和操作系统类型。 指令`setenv /x86 /release /xp`用来编译Windows XP或更新的32位版本。 使用`/?`命令可以查看`setenv`的其它用法。 所有命令都应该在`src\tools\msvc`目录下运行。
在编译前,根据需要修改`config.pl`中相应选项和使用到的第三方库的路径。 完整的配置由首先读取和解析的`config_default.pl`决定,然后从`config.pl`获取变更。 例如,为了指定Python的安装路径,在`config.pl`文件中添加以下语句:
```
$config->{python} = 'c:\python26';
```
只需要指定和`config_default.pl`文件中有差别的参数。
如果需要指定其它的环境变量,创建一个`buildenv.pl`文件并写入所需要的命令。 例如,为了在PATH中添加一个还不存在的bison变量,创建一个文件包含以下内容:
```
$ENV{PATH}=$ENV{PATH} . ';c:\some\where\bison\bin';
```
## 16.1.1\. 要求
编译PostgreSQL还需要以下几个工具。 使用`config.pl`文件来指定这些库的路径。
Microsoft Windows SDK
如果编译环境不兼容所支持的Microsoft Windows SDK版本, 建议把SDK的版本升级到最新的版本(目前为7.1版本),下载地址为[http://www.microsoft.com/downloads/](http://www.microsoft.com/downloads/)。
在SDK中,必须要保证包含Windows Headers and Libraries这部分内容。 如果安装的Windows SDK中已经包含了Visual C++ Compilers, 就不再需要使用Visual Studio进行编译了。 注意Windows SDK 8.0a之后的版本不再附有完整的命令行编译环境。
ActiveState Perl
ActiveState Perl用于编译生成脚本,而MinGW或Cygwin的Perl则不起作用。 同样,它的路径也要添加到系统路径中。二进制文件下载地址为[http://www.activestate.com](http://www.activestate.com) (注意: 必须使用5.8或者更新的版本, 免费的标准版既可)。
下面的工具在开始时是不需要的,但是对于完整的包的编译是必须的。 使用`config.pl`文件来指定这些库的路径。
ActiveState TCL
用于编译PL/TCL(注意:要求8.4版本, 免费的标准版既可)。
Bison and Flex
Bison and Flex用来从GIT进行编译,对于发行版文件的编译是不需要的。 Bison需要1.875或2.2及更新版本。Flex需要使用2.5.31或更新版本。
Bison and Flex包含在msys工具套件内。 作为MinGW编译器套件的一部分,msys可以从[http://www.mingw.org/wiki/MSYS](http://www.mingw.org/wiki/MSYS)下载。 同时作为msysGit的一部分,msys也可以从[http://git-scm.com/](http://git-scm.com/)下载。
在`buildenv.pl`中,需要把包含`flex.exe`和`bison.exe`的目录添加到系统路径中, 除非它们已经存在于系统路径中。对于MinGW, 要把MinGW安装目录的子目录路径`\msys\1.0\bin`添加到系统路径中。 对于msysGit,要把Git安装目录下的`bin`目录添加到系统路径中。不要添加MinGW编译工具本身的目录到系统路径中。
> **Note:** GnuWin32中的Bison存在一个bug,当文件安装的路径中含有空格的时候,会导致Bison出现故障。 例如,用英文安装时的默认路径`C:\Program Files\GnuWin32`时会出现上述问题,解决办法是安装在类似`C:\GnuWin32`这样的目录, 或者在GnuWin32的环境变量PATH中使用NTFS短名称路径(例如`C:\PROGRA~1\GnuWin32`)。
> **Note:** 在PostgreSQL FTP上的winflex是旧的二进制版本,在64位Windows主机上执行时, 会报"flex: fatal internal error, exec failed"的错误。可以使用msys中的flex来替代以避免这个问题。
Diff
Diff用于进行回归测试,可以从[http://gnuwin32.sourceforge.net](http://gnuwin32.sourceforge.net)下载。
Gettext
Gettext用于编译NLS支持,可以从[http://gnuwin32.sourceforge.net](http://gnuwin32.sourceforge.net)下载。 需要注意的是二进制,依赖项和开发文件都需要。
MIT Kerberos
MIT Kerberos 用于提供Kerberos认证支持,可以从[http://web.mit.edu/Kerberos/dist/index.html](http://web.mit.edu/Kerberos/dist/index.html)下载。
libxml2 and libxslt
libxml2和libxslt用于提供XML支持。可以从[http://zlatkovic.com/pub/libxml](http://zlatkovic.com/pub/libxml)下载二进制文件, 也可以从[http://xmlsoft.org](http://xmlsoft.org)下载源代码。需要注意,libxml2需要iconv,也在上面的地址下载。
openssl
openssl用于提供SSL支持。可以从[http://www.slproweb.com/products/Win32OpenSSL.html](http://www.slproweb.com/products/Win32OpenSSL.html)下载二进制文件, 或者在[http://www.openssl.org](http://www.openssl.org)下载源代码。
ossp-uuid
ossp-uuid用于提供UUID-OSSP支持(仅用于contrib)。可以从[http://www.ossp.org/pkg/lib/uuid/](http://www.ossp.org/pkg/lib/uuid/)下载。
Python
Python用于编译PL/Python。可以从[http://www.python.org](http://www.python.org)下载。
zlib
zlib用于为pg_dump和pg_restore提供压缩支持。可以从[http://www.zlib.net](http://www.zlib.net)下载二进制文件。
## 16.1.2\. 针对64位Windows的注意事项
PostgreSQL的X64架构只能在64位Windows系统上编译,不支持安腾处理器。
同一个编译树上不支持32位和64位的混编。编译系统能自动检测平台环境是32位或64位, 并编译出对应版本。因此,在编译前启动正确的命令行很重要。
在服务器端使用python或openssl这样的第三方库,_必须_是64位的。64位服务器上不支持对32位库的加载。 一些第三方库只支持32位的PostgrSQL,这种情形下,它们不能用在64位的PostgreSQL上。
## 16.1.3\. 编译
使用发行版配置(默认)来编译完整的PostgreSQL,运行命令:
```
<kbd class="literal">build</kbd>
```
使用调试配置来编译完整的PostgreSQL,运行命令:
```
<kbd class="literal">build DEBUG</kbd>
```
只编译单个项目,例如psql,运行命令:
```
<kbd class="literal">build psql</kbd>
<kbd class="literal">build DEBUG psql</kbd>
```
要将默认的编译配置改为调试配置,需要在`buildenv.pl`文件中加入下面的内容:
```
$ENV{CONFIG}="Debug";
```
也可以Visual Studio的图形化界面来编译,这时需要在命令行中运行:
```
<kbd class="literal">perl mkvcbuild.pl</kbd>
```
然后在Visual Studio中打开`pgsql.sln`文件(从资源树的根目录)。
## 16.1.4\. 清除和安装
大多数时候,Visual Studio会自动追踪所依赖的文件的改动。但是当有大量改动的的时候,可能需要清除安装。 要做到这一点,只需简单的运行`clean.bat`,它将自动的清除生成的相关文件。 也可以在运行时添加`dist`参数,它的行为和<kbd class="literal">make distclean</kbd>命令比较相似,同时会清除flex/bison的输出文件。
默认情况下,所有的文件都会写在`debug`或`release`目录的一个子目录下面。要使用标准设置安装这些文件, 初始化这些生成的文件并使用数据库,运行命令:
```
<kbd class="literal">install c:\destination\directory</kbd>
```
## 16.1.5\. 运行回归测试
要运行回归测试,首先确保已经完成所需的编译。同时,确保用来加载系统所有部分(例如程序语言Perl和Python的DLLs)的DLLs已经在系统路径中存在。 如果没有,通过`buildenv.pl`文件来设置。要运行测试,运行`src\tools\msvc`目录中的一个命令:
```
<kbd class="literal">vcregress check</kbd>
<kbd class="literal">vcregress installcheck</kbd>
<kbd class="literal">vcregress plcheck</kbd>
<kbd class="literal">vcregress contribcheck</kbd>
```
要改变调度方式(默认是并行),将它加在命令行后:
```
<kbd class="literal">vcregress check serial</kbd>
```
关于回归测试的更多内容,见[Chapter 30](#calibre_link-116)。
## 16.1.6\. 编译文档
把PostgreSQL文档编译成HTML格式的需要一些工具和文件。为所有这些文件创建一个根目录,将它们存储在下列的子目录中。
OpenJade 1.3.1-2
从 [http://sourceforge.net/projects/openjade/files/openjade/1.3.1/openjade-1_3_1-2-bin.zip/download](http://sourceforge.net/projects/openjade/files/openjade/1.3.1/openjade-1_3_1-2-bin.zip/download)下载并解压到子目录`openjade-1.3.1`中。
DocBook DTD 4.2
从[http://www.oasis-open.org/docbook/sgml/4.2/docbook-4.2.zip](http://www.oasis-open.org/docbook/sgml/4.2/docbook-4.2.zip)下载并解压到子目录`docbook`中。
DocBook DSSSL 1.79
从[http://sourceforge.net/projects/docbook/files/docbook-dsssl/1.79/docbook-dsssl-1.79.zip/download](http://sourceforge.net/projects/docbook/files/docbook-dsssl/1.79/docbook-dsssl-1.79.zip/download)下载并解压到子目录`docbook-dsssl-1.79`中。
ISO character entities
从[http://www.oasis-open.org/cover/ISOEnts.zip](http://www.oasis-open.org/cover/ISOEnts.zip)下载并解压到子目录`docbook`中。
编辑`buildenv.pl`文件,为根目录的地址增加一个变量,如:
```
$ENV{DOCROOT}='c:\docbook';
```
要编译文档,运行`builddoc.bat`文件。注意为了生成索引, 实际上编译运行来两次。生成的HTML文件存在于`doc\src\sgml`中。
- 前言
- 何为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