目錄 搜尋
前言 何为PostgreSQL? PostgreSQL简史 格式约定 更多信息 臭虫汇报指导 I. 教程 章1. 从头开始 1.1. 安装 1.2. 体系基本概念 1.3. 创建一个数据库 1.4. 访问数据库 章2. SQL语言 2.1. 介绍 2.2. 概念 2.3. 创建新表 2.4. 向表中添加行 2.5. 查询一个表 2.6. 表间链接 2.7. 聚集函数 2.8. 更新 2.9. 删除 章3. 高级特性 3.1. 介绍 3.2. 视图 3.3. 外键 3.4. 事务 3.5. 窗口函数 3.6. 继承 3.7. 结论 II. SQL语言 章4. SQL语法 4.1. 词法结构 4.2. 值表达式 4.3. 调用函数 章5. 数据定义 5.1. 表的基本概念 5.2. 缺省值 5.3. 约束 5.4. 系统字段 5.5. 修改表 5.6. 权限 5.7. 模式 5.8. 继承 5.9. 分区 5.10. 其它数据库对象 5.11. 依赖性跟踪 章 6. 数据操作 6.1. 插入数据 6.2. 更新数据 6.3. 删除数据 章7. 查询 7.1. 概述 7.2. 表表达式 7.3. 选择列表 7.4. 组合查询 7.5. 行排序 7.6. LIMIT和OFFSET 7.7. VALUES列表 7.8. WITH的查询(公用表表达式) 章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. 数组 8.15. 复合类型 8.16. 对象标识符类型 8.17. 伪类型 章 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. 序列操作函数 9.16. 条件表达式 9.17. 数组函数和操作符 9.18. 聚合函数 9.19. 窗口函数 9.20. 子查询表达式 9.21. 行和数组比较 9.22. 返回集合的函数 9.23. 系统信息函数 9.24. 系统管理函数 9.25. 触发器函数 章10. 类型转换 10.3. 函数 10.2. 操作符 10.1. 概述 10.4. 值存储 10.5. UNION 章11. 索引 11.1. 介绍 11.2. 索引类型 11.3. 多字段索引 11.4. 索引和ORDER BY 11.5. 组合多个索引 11.6. 唯一索引 11.7. 表达式上的索引 11.8. 部分索引 11.9. 操作类和操作簇 11.10. 检查索引的使用 章12. Full Text Search 12.1. Introduction 12.2. Tables and Indexes 12.3. Controlling Text Search 12.4. Additional Features 12.5. Parsers 12.6. Dictionaries 12.7. Configuration Example 12.8. Testing and Debugging Text Search 12.9. GiST and GIN Index Types 12.10. psql Support 12.11. Limitations 12.12. Migration from Pre-8.3 Text Search 章13. 并发控制 13.1. 介绍 13.2. 事务隔离 13.3. 明确锁定 13.4. 应用层数据完整性检查 13.5. 锁和索引 章14. 性能提升技巧 14.1. 使用EXPLAIN 14.2. 规划器使用的统计信息 14.3. 用明确的JOIN语句控制规划器 14.4. 向数据库中添加记录 14.5. 非持久性设置 III. 服务器管理 章15. 安装指导 15.1. 简版 15.2. 要求 15.3. 获取源码 15.4. 升级 15.5. 安装过程 15.6. 安装后的设置 15.7. 支持的平台 15.8. 特殊平台的要求 章16. Installation from Source Code on Windows 16.1. Building with Visual C++ or the Platform SDK 16.2. Building libpq with Visual C++ or Borland C++ 章17. 服务器安装和操作 17.1. PostgreSQL用户帐户 17.2. 创建数据库集群 17.3. 启动数据库服务器 17.4. 管理内核资源 17.5. 关闭服务 17.6. 防止服务器欺骗 17.7. 加密选项 17.8. 用SSL进行安全的TCP/IP连接 17.9. Secure TCP/IP Connections with SSH Tunnels 章18. 服务器配置 18.1. 设置参数 18.2. 文件位置 18.3. 连接和认证 18.4. 资源消耗 18.5. 预写式日志 18.6. 查询规划 18.7. 错误报告和日志 18.8. 运行时统计 18.9. 自动清理 18.10. 客户端连接缺省 18.12. 版本和平台兼容性 18.11. 锁管理 18.13. 预置选项 18.14. 自定义的选项 18.15. 开发人员选项 18.16. 短选项 章19. 用户认证 19.1. pg_hba.conf 文件 19.2. 用户名映射 19.3. 认证方法 19.4. 用户认证 章20. 数据库角色和权限 20.1. 数据库角色 20.2. 角色属性 20.3. 权限 20.4. 角色成员 20.5. 函数和触发器 章21. 管理数据库 21.1. 概述 21.2. 创建一个数据库 21.3. 临时库 21.4. 数据库配置 21.5. 删除数据库 21.6. 表空间 章22. 本土化 22.1. 区域支持 22.2. 字符集支持 章23. 日常数据库维护工作 23.1. Routine Vacuuming日常清理 23.2. 经常重建索引 23.3. 日志文件维护 章24. 备份和恢复 24.1. SQL转储 24.2. 文件系统级别的备份 24.3. 在线备份以及即时恢复(PITR) 24.4. 版本间迁移 章25. 高可用性与负载均衡,复制 25.1. 不同解决方案的比较 25.2. 日志传送备份服务器 25.3. 失效切换 25.4. 日志传送的替代方法 25.5. 热备 章26. 恢复配置 26.1. 归档恢复设置 26.2. 恢复目标设置 26.3. 备服务器设置 章27. 监控数据库的活动 27.1. 标准Unix工具 27.2. 统计收集器 27.3. 查看锁 27.4. 动态跟踪 章28. 监控磁盘使用情况 28.1. 判断磁盘的使用量 28.2. 磁盘满导致的失效 章29. 可靠性和预写式日志 29.1. 可靠性 29.2. 预写式日志(WAL) 29.3. 异步提交 29.4. WAL配置 29.5. WAL内部 章30. Regression Tests 30.1. Running the Tests 30.2. Test Evaluation 30.3. Variant Comparison Files 30.4. Test Coverage Examination IV. 客户端接口 章31. libpq-C库 31.1. 数据库联接函数 31.2. 连接状态函数 31.3. 命令执行函数 31.4. 异步命令处理 31.5. 取消正在处理的查询 31.6. 捷径接口 31.7. 异步通知 31.8. 与COPY命令相关的函数 31.9. Control Functions 控制函数 31.10. 其他函数 31.11. 注意信息处理 31.12. 事件系统 31.13. 环境变量 31.14. 口令文件 31.15. 连接服务的文件 31.16. LDAP查找连接参数 31.17. SSL支持 31.18. 在多线程程序里的行为 31.19. 制作libpq程序 31.20. 例子程序 章32. 大对象 32.1. 介绍 32.2. 实现特点 32.3. 客户端接口 32.4. 服务器端函数 32.5. 例子程序 章33. ECPG - Embedded SQL in C 33.1. The Concept 33.2. Connecting to the Database Server 33.3. Closing a Connection 33.4. Running SQL Commands 33.5. Choosing a Connection 33.6. Using Host Variables 33.7. Dynamic SQL 33.8. pgtypes library 33.9. Using Descriptor Areas 33.10. Informix compatibility mode 33.11. Error Handling 33.12. Preprocessor directives 33.13. Processing Embedded SQL Programs 33.14. Library Functions 33.15. Internals 章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. check_constraint_routine_usage 34.8. check_constraints 34.9. column_domain_usage 34.10. column_privileges 34.11. column_udt_usage 34.12. 字段 34.13. constraint_column_usage 34.14. constraint_table_usage 34.15. data_type_privileges 34.16. domain_constraints 34.18. domains 34.17. domain_udt_usage 34.19. element_types 34.20. enabled_roles 34.21. foreign_data_wrapper_options 34.22. foreign_data_wrappers 34.23. foreign_server_options 34.24. foreign_servers 34.25. key_column_usage 34.26. parameters 34.27. referential_constraints 34.28. role_column_grants 34.29. role_routine_grants 34.30. role_table_grants 34.31. role_usage_grants 34.32. routine_privileges 34.33. routines 34.34. schemata 34.35. sequences 34.36. sql_features 34.37. sql_implementation_info 34.38. sql_languages 34.39. sql_packages 34.40. sql_parts 34.41. sql_sizing 34.42. sql_sizing_profiles 34.43. table_constraints 34.44. table_privileges 34.45. tables 34.46. triggered_update_columns 34.47. 触发器 34.48. usage_privileges 34.49. user_mapping_options 34.50. user_mappings 34.51. view_column_usage 34.52. view_routine_usage 34.53. view_table_usage 34.54. 视图 V. 服务器端编程 章35. 扩展SQL 35.1. 扩展性是如何实现的 35.2. PostgreSQL类型系统 35.3. User-Defined Functions 35.4. Query Language (SQL) Functions 35.5. Function Overloading 35.6. Function Volatility Categories 35.7. Procedural Language Functions 35.8. Internal Functions 35.9. C-Language Functions 35.10. User-Defined Aggregates 35.11. User-Defined Types 35.12. User-Defined Operators 35.13. Operator Optimization Information 35.14. Interfacing Extensions To Indexes 35.15. 用C++扩展 章36. 触发器 36.1. 触发器行为概述 36.3. 用 C 写触发器 36.2. 数据改变的可视性 36.4. 一个完整的例子 章37. 规则系统 37.1. The Query Tree 37.2. 视图和规则系统 37.3. 在INSERT,UPDATE和DELETE上的规则 37.4. 规则和权限 37.5. 规则和命令状态 37.6. 规则与触发器得比较 章38. Procedural Languages 38.1. Installing Procedural Languages 章39. PL/pgSQL - SQL过程语言 39.1. 概述 39.2. PL/pgSQL的结构 39.3. 声明 39.4. 表达式 39.5. 基本语句 39.6. 控制结构 39.7. 游标 39.8. 错误和消息 39.9. 触发器过程 39.10. PL/pgSQL Under the Hood 39.11. 开发PL/pgSQL的一些提示 39.12. 从OraclePL/SQL 进行移植 章40. PL/Tcl - Tcl Procedural Language 40.1. Overview 40.2. PL/Tcl Functions and Arguments 40.3. Data Values in PL/Tcl 40.4. Global Data in PL/Tcl 40.5. Database Access from PL/Tcl 40.6. Trigger Procedures in PL/Tcl 40.7. Modules and the unknown command 40.8. Tcl Procedure Names 章41. PL/Perl - Perl Procedural Language 41.1. PL/Perl Functions and Arguments 41.2. Data Values in PL/Perl 41.3. Built-in Functions 41.4. Global Values in PL/Perl 41.6. PL/Perl Triggers 41.5. Trusted and Untrusted PL/Perl 41.7. PL/Perl Under the Hood 章42. PL/Python - Python Procedural Language 42.1. Python 2 vs. Python 3 42.2. PL/Python Functions 42.3. Data Values 42.4. Sharing Data 42.5. Anonymous Code Blocks 42.6. Trigger Functions 42.7. Database Access 42.8. Utility Functions 42.9. Environment Variables 章43. Server Programming Interface 43.1. Interface Functions Spi-spi-connect Spi-spi-finish Spi-spi-push Spi-spi-pop Spi-spi-execute Spi-spi-exec Spi-spi-execute-with-args Spi-spi-prepare Spi-spi-prepare-cursor Spi-spi-prepare-params Spi-spi-getargcount Spi-spi-getargtypeid Spi-spi-is-cursor-plan Spi-spi-execute-plan Spi-spi-execute-plan-with-paramlist Spi-spi-execp Spi-spi-cursor-open Spi-spi-cursor-open-with-args Spi-spi-cursor-open-with-paramlist Spi-spi-cursor-find Spi-spi-cursor-fetch Spi-spi-cursor-move Spi-spi-scroll-cursor-fetch Spi-spi-scroll-cursor-move Spi-spi-cursor-close Spi-spi-saveplan 43.2. Interface Support Functions Spi-spi-fname Spi-spi-fnumber Spi-spi-getvalue Spi-spi-getbinval Spi-spi-gettype Spi-spi-gettypeid Spi-spi-getrelname Spi-spi-getnspname 43.3. Memory Management Spi-spi-palloc Spi-realloc Spi-spi-pfree Spi-spi-copytuple Spi-spi-returntuple Spi-spi-modifytuple Spi-spi-freetuple Spi-spi-freetupletable Spi-spi-freeplan 43.4. Visibility of Data Changes 43.5. Examples VI. 参考手册 I. SQL命令 Sql-abort Sql-alteraggregate Sql-alterconversion Sql-alterdatabase Sql-alterdefaultprivileges Sql-alterdomain Sql-alterforeigndatawrapper Sql-alterfunction Sql-altergroup Sql-alterindex Sql-alterlanguage Sql-alterlargeobject Sql-alteroperator Sql-alteropclass Sql-alteropfamily Sql-alterrole Sql-alterschema Sql-altersequence Sql-alterserver Sql-altertable Sql-altertablespace Sql-altertsconfig Sql-altertsdictionary Sql-altertsparser Sql-altertstemplate Sql-altertrigger Sql-altertype Sql-alteruser Sql-alterusermapping Sql-alterview Sql-analyze Sql-begin Sql-checkpoint Sql-close Sql-cluster Sql-comment Sql-commit Sql-commit-prepared Sql-copy Sql-createaggregate Sql-createcast Sql-createconstraint Sql-createconversion Sql-createdatabase Sql-createdomain Sql-createforeigndatawrapper Sql-createfunction Sql-creategroup Sql-createindex Sql-createlanguage Sql-createoperator Sql-createopclass Sql-createopfamily Sql-createrole Sql-createrule Sql-createschema Sql-createsequence Sql-createserver Sql-createtable Sql-createtableas Sql-createtablespace Sql-createtsconfig Sql-createtsdictionary Sql-createtsparser Sql-createtstemplate Sql-createtrigger Sql-createtype Sql-createuser Sql-createusermapping Sql-createview Sql-deallocate Sql-declare Sql-delete Sql-discard Sql-do Sql-dropaggregate Sql-dropcast Sql-dropconversion Sql-dropdatabase Sql-dropdomain Sql-dropforeigndatawrapper Sql-dropfunction Sql-dropgroup Sql-dropindex Sql-droplanguage Sql-dropoperator Sql-dropopclass Sql-dropopfamily Sql-drop-owned Sql-droprole Sql-droprule Sql-dropschema Sql-dropsequence Sql-dropserver Sql-droptable Sql-droptablespace Sql-droptsconfig Sql-droptsdictionary Sql-droptsparser Sql-droptstemplate Sql-droptrigger Sql-droptype Sql-dropuser Sql-dropusermapping Sql-dropview Sql-end Sql-execute Sql-explain Sql-fetch Sql-grant Sql-insert Sql-listen Sql-load Sql-lock Sql-move Sql-notify Sql-prepare Sql-prepare-transaction Sql-reassign-owned Sql-reindex Sql-release-savepoint Sql-reset Sql-revoke Sql-rollback Sql-rollback-prepared Sql-rollback-to Sql-savepoint Sql-select Sql-selectinto Sql-set Sql-set-constraints Sql-set-role Sql-set-session-authorization Sql-set-transaction Sql-show Sql-start-transaction Sql-truncate Sql-unlisten Sql-update Sql-vacuum Sql-values II. 客户端应用程序 App-clusterdb App-createdb App-createlang App-createuser App-dropdb App-droplang App-dropuser App-ecpg App-pgconfig App-pgdump App-pg-dumpall App-pgrestore App-psql App-reindexdb App-vacuumdb III. PostgreSQL服务器应用程序 App-initdb App-pgcontroldata App-pg-ctl App-pgresetxlog App-postgres App-postmaster VII. 内部 章44. PostgreSQL内部概览 44.1. 查询路径 44.2. 连接是如何建立起来的 44.3. 分析器阶段 44.4. ThePostgreSQL规则系统 44.5. 规划器/优化器 44.6. 执行器 章45. 系统表 45.1. 概述 45.2. pg_aggregate 45.3. pg_am 45.4. pg_amop 45.5. pg_amproc 45.6. pg_attrdef 45.7. pg_attribute 45.8. pg_authid 45.9. pg_auth_members 45.10. pg_cast 45.11. pg_class 45.12. pg_constraint 45.13. pg_conversion 45.14. pg_database 45.15. pg_db_role_setting 45.16. pg_default_acl 45.17. pg_depend 45.18. pg_description 45.19. pg_enum 45.20. pg_foreign_data_wrapper 45.21. pg_foreign_server 45.22. pg_index 45.23. pg_inherits 45.24. pg_language 45.25. pg_largeobject 45.26. pg_largeobject_metadata 45.27. pg_namespace 45.28. pg_opclass 45.29. pg_operator 45.30. pg_opfamily 45.31. pg_pltemplate 45.32. pg_proc 45.33. pg_rewrite 45.34. pg_shdepend 45.35. pg_shdescription 45.36. pg_statistic 45.37. pg_tablespace 45.38. pg_trigger 45.39. pg_ts_config 45.40. pg_ts_config_map 45.41. pg_ts_dict 45.42. pg_ts_parser 45.43. pg_ts_template 45.44. pg_type 45.45. pg_user_mapping 45.46. System Views 45.47. pg_cursors 45.48. pg_group 45.49. pg_indexes 45.50. pg_locks 45.51. pg_prepared_statements 45.52. pg_prepared_xacts 45.53. pg_roles 45.54. pg_rules 45.55. pg_settings 45.56. pg_shadow 45.57. pg_stats 45.58. pg_tables 45.59. pg_timezone_abbrevs 45.60. pg_timezone_names 45.61. pg_user 45.62. pg_user_mappings 45.63. pg_views 章46. Frontend/Backend Protocol 46.1. Overview 46.2. Message Flow 46.3. Streaming Replication Protocol 46.4. Message Data Types 46.5. Message Formats 46.6. Error and Notice Message Fields 46.7. Summary of Changes since Protocol 2.0 47. PostgreSQL Coding Conventions 47.1. Formatting 47.2. Reporting Errors Within the Server 47.3. Error Message Style Guide 章48. Native Language Support 48.1. For the Translator 48.2. For the Programmer 章49. Writing A Procedural Language Handler 章50. Genetic Query Optimizer 50.1. Query Handling as a Complex Optimization Problem 50.2. Genetic Algorithms 50.3. Genetic Query Optimization (GEQO) in PostgreSQL 50.4. Further Reading 章51. 索引访问方法接口定义 51.1. 索引的系统表记录 51.2. 索引访问方法函数 51.3. 索引扫描 51.4. 索引锁的考量 51.5. 索引唯一性检查 51.6. 索引开销估计函数 章52. GiST Indexes 52.1. Introduction 52.2. Extensibility 52.3. Implementation 52.4. Examples 52.5. Crash Recovery 章53. GIN Indexes 53.1. Introduction 53.2. Extensibility 53.3. Implementation 53.4. GIN tips and tricks 53.5. Limitations 53.6. Examples 章54. 数据库物理存储 54.1. 数据库文件布局 54.2. TOAST 54.3. 自由空间映射 54.4. 可见映射 54.5. 数据库分页文件 章55. BKI后端接口 55.1. BKI 文件格式 55.2. BKI命令 55.3. 系统初始化的BKI文件的结构 55.4. 例子 章56. 规划器如何使用统计信息 56.1. 行预期的例子 VIII. 附录 A. PostgreSQL错误代码 B. 日期/时间支持 B.1. 日期/时间输入解析 B.2. 日期/时间关键字 B.3. 日期/时间配置文件 B.4. 日期单位的历史 C. SQL关键字 D. SQL Conformance D.1. Supported Features D.2. Unsupported Features E. Release Notes Release-0-01 Release-0-02 Release-0-03 Release-1-0 Release-1-01 Release-1-02 Release-1-09 Release-6-0 Release-6-1 Release-6-1-1 Release-6-2 Release-6-2-1 Release-6-3 Release-6-3-1 Release-6-3-2 Release-6-4 Release-6-4-1 Release-6-4-2 Release-6-5 Release-6-5-1 Release-6-5-2 Release-6-5-3 Release-7-0 Release-7-0-1 Release-7-0-2 Release-7-0-3 Release-7-1 Release-7-1-1 Release-7-1-2 Release-7-1-3 Release-7-2 Release-7-2-1 Release-7-2-2 Release-7-2-3 Release-7-2-4 Release-7-2-5 Release-7-2-6 Release-7-2-7 Release-7-2-8 Release-7-3 Release-7-3-1 Release-7-3-10 Release-7-3-11 Release-7-3-12 Release-7-3-13 Release-7-3-14 Release-7-3-15 Release-7-3-16 Release-7-3-17 Release-7-3-18 Release-7-3-19 Release-7-3-2 Release-7-3-20 Release-7-3-21 Release-7-3-3 Release-7-3-4 Release-7-3-5 Release-7-3-6 Release-7-3-7 Release-7-3-8 Release-7-3-9 Release-7-4 Release-7-4-1 Release-7-4-10 Release-7-4-11 Release-7-4-12 Release-7-4-13 Release-7-4-14 Release-7-4-15 Release-7-4-16 Release-7-4-17 Release-7-4-18 Release-7-4-19 Release-7-4-2 Release-7-4-20 Release-7-4-21 Release-7-4-22 Release-7-4-23 Release-7-4-24 Release-7-4-25 Release-7-4-26 Release-7-4-27 Release-7-4-28 Release-7-4-29 Release-7-4-3 Release-7-4-30 Release-7-4-4 Release-7-4-5 Release-7-4-6 Release-7-4-7 Release-7-4-8 Release-7-4-9 Release-8-0 Release-8-0-1 Release-8-0-10 Release-8-0-11 Release-8-0-12 Release-8-0-13 Release-8-0-14 Release-8-0-15 Release-8-0-16 Release-8-0-17 Release-8-0-18 Release-8-0-19 Release-8-0-2 Release-8-0-20 Release-8-0-21 Release-8-0-22 Release-8-0-23 Release-8-0-24 Release-8-0-25 Release-8-0-26 Release-8-0-3 Release-8-0-4 Release-8-0-5 Release-8-0-6 Release-8-0-7 Release-8-0-8 Release-8-0-9 Release-8-1 Release-8-1-1 Release-8-1-10 Release-8-1-11 Release-8-1-12 Release-8-1-13 Release-8-1-14 Release-8-1-15 Release-8-1-16 Release-8-1-17 Release-8-1-18 Release-8-1-19 Release-8-1-2 Release-8-1-20 Release-8-1-21 Release-8-1-22 Release-8-1-23 Release-8-1-3 Release-8-1-4 Release-8-1-5 Release-8-1-6 Release-8-1-7 Release-8-1-8 Release-8-1-9 Release-8-2 Release-8-2-1 Release-8-2-10 Release-8-2-11 Release-8-2-12 Release-8-2-13 Release-8-2-14 Release-8-2-15 Release-8-2-16 Release-8-2-17 Release-8-2-18 Release-8-2-19 Release-8-2-2 Release-8-2-20 Release-8-2-21 Release-8-2-3 Release-8-2-4 Release-8-2-5 Release-8-2-6 Release-8-2-7 Release-8-2-8 Release-8-2-9 Release-8-3 Release-8-3-1 Release-8-3-10 Release-8-3-11 Release-8-3-12 Release-8-3-13 Release-8-3-14 Release-8-3-15 Release-8-3-2 Release-8-3-3 Release-8-3-4 Release-8-3-5 Release-8-3-6 Release-8-3-7 Release-8-3-8 Release-8-3-9 Release-8-4 Release-8-4-1 Release-8-4-2 Release-8-4-3 Release-8-4-4 Release-8-4-5 Release-8-4-6 Release-8-4-7 Release-8-4-8 Release-9-0 Release-9-0-1 Release-9-0-2 Release-9-0-3 Release-9-0-4 F. 额外提供的模块 F.1. adminpack F.2. auto_explain F.3. btree_gin F.4. btree_gist F.5. chkpass F.6. citext F.7. cube F.8. dblink Contrib-dblink-connect Contrib-dblink-connect-u Contrib-dblink-disconnect Contrib-dblink Contrib-dblink-exec Contrib-dblink-open Contrib-dblink-fetch Contrib-dblink-close Contrib-dblink-get-connections Contrib-dblink-error-message Contrib-dblink-send-query Contrib-dblink-is-busy Contrib-dblink-get-notify Contrib-dblink-get-result Contrib-dblink-cancel-query Contrib-dblink-get-pkey Contrib-dblink-build-sql-insert Contrib-dblink-build-sql-delete Contrib-dblink-build-sql-update F.9. dict_int F.10. dict_xsyn F.11. earthdistance F.12. fuzzystrmatch F.13. hstore F.14. intagg F.15. intarray F.16. isn F.17. lo F.18. ltree F.19. oid2name F.20. pageinspect F.21. passwordcheck F.22. pg_archivecleanup F.23. pgbench F.24. pg_buffercache F.25. pgcrypto F.26. pg_freespacemap F.27. pgrowlocks F.28. pg_standby F.29. pg_stat_statements F.30. pgstattuple F.31. pg_trgm F.32. pg_upgrade F.33. seg F.34. spi F.35. sslinfo F.36. tablefunc F.37. test_parser F.38. tsearch2 F.39. unaccent F.40. uuid-ossp F.41. vacuumlo F.42. xml2 G. 外部项目 G.1. 客户端接口 G.2. 过程语言 G.3. 扩展 H. The Source Code Repository H.1. Getting The Source Via Git I. 文档 I.1. DocBook I.2. 工具集 I.3. 制作文档 I.4. 文档写作 I.5. 风格指导 J. 首字母缩略词 参考书目 Bookindex Index
文字

15.5. 安装过程

  1. 配置

    安装过程的第一步就是配置源代码树并选择你喜欢的选项。 这个工作是通过运行configure脚本实现的,对于缺省安装,你只需要简单地敲入

    ./configure

    该脚本将运行一些测试来决定一些系统相关的变量,并检测操作系统的设置, 最后将在编译树中创建一些文件以记录它找到了什么。如果你想保持编译目录的独立, 那么你也可以在源代码树之外的其它目录里运行configure脚本。 这个过程也称作VPATH编译。 如下:

    mkdir build_dir
    cd build_dir
    /path/to/source/tree/configure [options go here]
    gmake

    缺省设置将编译服务器和应用程序,还有所有只需要C编译器的客户端程序和接口。 缺省时所有文件都将安装到/usr/local/pgsql目录。

    你可以通过给出下面的一个或多个configure命令行选项来自定义编译和安装过程:

    --prefix=PREFIX

    把所有文件装在PREFIX目录下而不是/usr/local/pgsql里。 实际的文件会安装到不同的子目录里; 甚至没有一个文件会直接安装到PREFIX目录里。

    如果你有特殊需要,你还可以用下面的选项自定义不同子目录的位置。 不过,即使你保持缺省设置,也可以在安装之后移动目录(mandoc路径不受影响),

    此时你可能需要使用configure--disable-rpath选项。 还有,你需要告诉操作系统如何找到共享库。

    --exec-prefix=EXEC-PREFIX

    把体系相关的文件安装到EXEC-PREFIX , 而不是PREFIX设置的地方。 这样做可以比较方便地在不同主机之间共享体系相关的文件。 如果你省略它,那么EXEC-PREFIX就会被设置为等于PREFIX 并且体系相关和体系无关的文件都会安装到同一目录树下,当然这也可能是你想要的。

    --bindir=DIRECTORY

    需要声明可执行程序的安装目录,缺省是EXEC-PREFIX/bin, 通常也就是/usr/local/pgsql/bin

    --sysconfdir=DIRECTORY

    设置配置文件的安装目录,缺省是PREFIX/etc

    --libdir=DIRECTORY

    设置库文件和动态装载模块的安装目录。缺省是EXEC-PREFIX/lib

    --includedir=DIRECTORY

    设置C和C++头文件的目录。缺省是PREFIX/include

    --datarootdir=DIRECTORY

    设置各种类型的只读数据文件的根目录,只是后面一些选项的缺省设置。缺省是PREFIX/share

    --datadir=DIRECTORY

    设置安装的程序使用的只读数据文件的目录。缺省是DATAROOTDIR。 注意这与您的数据库文件放置位置无关。

    --localedir=DIRECTORY

    设置语言环境数据的安装目录,尤其是消息编译目录文件。缺省是DATAROOTDIR/locale

    --mandir=DIRECTORY

    PostgreSQL自带手册页是安装到各自的manx子目录里。 缺省是DATAROOTDIR/man

    --docdir=DIRECTORY

    设置文档文件的根安装目录,除了"man"。这只能设置为下列选项的默认选项。 该选项的缺省值是 DATAROOTDIR/doc/postgresql

    --htmldir=DIRECTORY

    PostgreSQL的HTML格式文件将安装在这个目录下,缺省是 DATAROOTDIR

    Note: 为了让PostgreSQL能够安装在一些共享的安装位置(比如/usr/local/include), 同时又不至于和系统其它部分产生名字空间干扰,我们采取了一些步骤。 首先,安装脚本会自动给datadir, sysconfdir, 和docdir 后面附加上""/postgresql"", 除非展开的完整路径名已经包含字符串"postgres""pgsql"。 比如,如果你选择/usr/local作为前缀,那么文档将安装在/usr/local/doc/postgresql, 但如果前缀是/opt/postgres ,那么它将被放到/opt/postgres/doc 。 客户接口的公共C头文件安装到了 includedir ,并且是名字空间无关的。 内部的头文件和服务器头文件都安装到includedir下的私有目录中去了。 参考每种接口的文档获取关于如何得到头文件的信息。 最后,如果合适,那么也会在libdir下创建一个私有的子目录,用于动态装载模块。

    --with-includes=DIRECTORIES

    DIRECTORIES是一系列冒号分隔的目录, 这些目录将被加入编译器的头文件搜索列表中。 如果你有一些可选的包(比如GNU Readline)安装在非标准位置, 你就必须使用这个选项,以及可能还有相应的--with-libraries选项。

    例子: --with-includes=/opt/gnu/include:/usr/sup/include.

    --with-libraries=DIRECTORIES

    DIRECTORIES是一系列冒号分隔的目录,这些目录是用于查找库文件的。 如果你有一些包安装在非标准位置, 你可能就需要使用这个选项(以及对应的--with-includesoption选项)。

    例子: --with-libraries=/opt/gnu/lib:/usr/sup/lib.

    --enable-nls[=LANGUAGES]

    打开本地语言支持(NLS),也就是以非英文显示程序信息的能力。 LANGUAGES是一个可选空格分隔的语言代码列表,标识你想支持的语言。 比如--enable-nls='de fr'。 你提供的列表和实际支持的列表之间的交集会自动计算出来。 如果你没有声明一个列表,那么就安装所有可用的翻译。

    要使用这个选项,你需要一个GettextAPI的实现。见上文。

    --with-pgport=NUMBER

    NUMBER为服务器和客户端的缺省端口(缺省是5432)。 这个端口可以在以后设置,不过如果你在这里声明,那么服务器和客户端就都有了相同的编译好了的缺省值。 这样会方便些。 通常选取一个非缺省值的原因是你要在同一台机器上运行多个PostgreSQL服务器。

    --with-perl

    编译PL/Perl服务器端编程语言。

    --with-python

    编译PL/Python服务器端编程语言。

    --with-tcl

    编译PL/Tcl服务器端编程语言。

    --with-tclconfig=DIRECTORY

    Tcl安装的tclConfig.sh文件所在目录里面包含编译Tcl模块的配置信息。 configure通常会自动在约定俗成的位置找到这些文件, 但是如果你需要一个不同版本的Tcl,你也可以声明不同的目录。

    --with-gssapi

    编译支持GSSAPI认证。在许多系统上,GSSAPI(通常是Kerberos安装的一部分) 没有安装在缺省的搜索目录下(比如/usr/include, /usr/lib),所以你必须使用附加的--with-includes and --with-libraries选项。 configure在继续配置之前将检查所需要的头文件和库,以确保GSSAPI是充分可用的。

    --with-krb5

    编译支持 Kerberos 5 在许多系统上,Kerberos 系统没有安装在缺省的搜索目录下(比如 /usr/include, /usr/lib), 所以你必须使用附加的--with-includes--with-libraries选项。 configure在继续配置之前将检查所需要的头文件和库,以确保 Kerberos 是充分可用的。

    --with-krb-srvnam=NAME

    Kerberos缺省的主服务主名(也被GSSAPI使用),缺省值是postgres,通常不可以修改这个值。 除非你有一个Windows环境,在这种情况下,它必须设置为大写POSTGRES

    --with-openssl

    编译支持SSL(加密的)连接。 这个选项需要安装OpenSSL包。 configure将在安装之前检查所需要的头文件和库文件以确保OpenSSL安装是充分可用的。

    --with-pam

    编译PAM(可插拔认证模块)支持。

    --with-ldap

    编译LDAP支持。 用于认证和查找连接参数(参见Section 31.16 and Section 19.3.7以获取更多信息)。 在Unix上,这需要OpenLDAP包的支持。在Windows上,将使用缺省的WinLDAP库。 configure将会检查所需的头文件和库以确保OpenLDAP的安装是充分可用的。

    --without-readline

    避免使用Readlinelibedit库。 这样会关闭psql命令行编辑和历史,因此建议不使用。

    --with-libedit-preferred

    BSD许可优先使用libedit库而不是Readline库。 该选项仅在同时安装了这两个库的情况下才有意义,这时会缺省使用Readline库。

    --with-bonjour

    编译Bonjour支持。这要求操作系统支持Bonjour。 在Mac OS X系统上建议使用。

    --with-ossp-uuid

    当编译contrib/uuid-ossp,使用OSSP UUID library。该库提供生成的UUID的函数。

    --with-libxml

    编译libxml(允许SQL/XML支持)。该功能需要Libxml 2.6.23或更新的版本。

    Libxml通过安装xml2-config来检测所需的编译器和链接器选项。 如果发现,PostgreSQL将自动使用它。为了在指定位置来进行libxml安装, 可以设置环境变量XML2_CONFIG来指向从属安装的xml2-config程序, 或使用的选项--with-includes--with-libraries

    --with-libxslt

    当编译contrib/xml2时,使用libxslt。contrib/xml2依靠这个库来执行由XSL转换的XML。

    --disable-integer-datetimes

    禁用支持64位整数存储时间戳和间隔,以浮点值存储日期。浮点缺省日期存储是 PostgreSQL8.4之前发布的,但它现在已经过时,因为在timestamp值域的微秒精度方面,它不支持。 然而,基于整数日期时间的存储需要64位的整数类型。因此,当没有这种类型可用或兼容为 PostgreSQL之前版本事先编写的应用程序时,这个选项可以使用。 参阅 Section 8.5获得更多详细信息。

    --disable-float4-byval

    禁止按"by value"传递float4值,应该通过"by reference"来传递。 此选项可估算性能,但可能需要与旧的用户自定义函数(用C语言编写并且是使用"version 0"来调用的约定)兼容。 一个更好的长期解决方案是使用"version 1"调用约定来更新任何此类函数。

    --disable-float8-byval

    禁止按"by value"传递float8的值,应该通过"by reference"来传递。 此选项可估算性能,但可能需要与旧的用户自定义函数(用C语言编写并且是使用"version 0"来调用的约定)兼容。 一个更好的长期解决方案是使用"version 1"调用约定来更新任何此类函数。 注意:这个选项影响不仅float8,int8和一些相关的类型如时间戳等也会受影响。 在32位平台上,缺省的是--disable-float8-byval,不允许选择--enable-float8-byval

    --with-segsize=SEGSIZE

    设置段大小(segment size),以千兆字节为单位。大型表分为多个操作系统文件,每个大小等于段大小。 这就避免了存在许多平台上文件大小限制问题。 默认段大小为1千兆字节,在所有支持平台上都是安全的。 如果您的操作系统支持"largefile",那么您可以使用一个较大值的段大小。 这可能有助于减少运行于大表中消耗的文件描述符数, 但要小心,不要选择比您的平台支持的,并且你打算使用的文件系统大的值。 你想使用其他工具,如tar,还设置了可用文件大小限制。建议,但不是绝对需要,该值 是2的乘方。请注意,改变这个值需要一个initdb。

    --with-blocksize=BLOCKSIZE

    设置block size,以千字节为单位。这是表内 存储和I/O的单位。缺省值是8千字节,适用于大多数情况,但其他值在特殊情况下也可能是有用的。 值必须是是在1和32之间的2的乘方,以千字节为单位。 请注意,改变这个值,需要一个initdb。

    --with-wal-segsize=SEGSIZE

    设置WAL segment size,以兆字节为单位。这是 WAL日志每一个独立文件的大小。可以通过调整该值的大小来控制WAL日志传送粒度。 该值必须是在1和64之间的2的乘方(兆字节为单位),缺省大小为16兆字节。 请注意,改变这个值,需要一个initdb。

    --with-wal-blocksize=BLOCKSIZE

    设置WAL block size,以千字节为单位。这是WAL日志内 存储和I/O的单位。缺省情况值是8千字节,适用于大多数情况,但其他值在特殊情况下也可能是有用的。 值必须是1和64之间的2的乘方(千字节为单位)。 请注意,改变这个值,需要一个initdb。

    --disable-spinlocks

    允许PostgreSQL在没有该平台的CPU自旋锁支持的情况下编译成功。 缺乏自旋锁的支持将导致性能恶化,因此,只有在编译过程中止,并且提示该平台缺乏自旋锁支持的时候才使用这个选项。 如果在你的平台上需要这个选项才能编译PostgreSQL,请向PostgreSQL开发者报告这个问题。

    --disable-thread-safety

    禁用客户端库的线程安全。该选项通过安全地控制他们私有的连接句柄来阻止在libpqECPG程序里的并发线程。

    --with-system-tzdata=DIRECTORY

    PostgreSQL包括它自己的时区数据库(该库需要时间和日期操作操作)。 这个时区数据库实际上兼容由许多操作系统(如FFreeBSD, Linux,和Solaris)提供的"zoneinfo"时区数据库,因此不必重新安装。 当使用此选项时,使用的是DIRECTORY中系统提供的时区数据库,而不是PostgreSQL的源代码发布中的时区数据库。 DIRECTORY必须声明为绝对路径。 在某些操作系统上,该目录可能是/usr/share/zoneinfo。 请注意,安装程序将不检测不匹配或错误的时区数据。 如果您使用此选项,建议您运行回归测试来验证,指向正确运行PostgreSQL的时间区域数据。

    此选项主要是面向对目标操作系统很了解的二进制包分发者。 使用该选项的最大好处是,无论何时,当本地夏令时规则发生改变时,不需要胜利PostgreSQL包。 另一个好处是,如果时区数据库文件并不需要在安装期间编译, PostgreSQL可以更直接交叉编译()。

    --without-zlib

    避免使用Zlib库。 这样就关闭了pg_dumppg_restore里面的压缩支持。 这个选项只适用于那些没有这个库的罕见的系统。

    --enable-debug

    把所有程序和库以带有调试符号的方式编译。 这意味着你可以通过一个调试器运行程序来分析问题。 这样做显著增大了最后安装的可执行文件的大小,并且在非GCC的编译器上,通常还要关闭编译器优化,导致速度下降。 但是,如果有这些符号表的话,就可以非常有效地帮助定位可能发生问题的位置。 目前,我们建议只有在使用GCC的情况下才在生产安装中使用这个选项。 但是如果你正在进行开发工作,或者正在使用beta版本,那么应该一直开启它。

    --enable-coverage

    If using GCC, all programs and libraries are compiled with code coverage testing instrumentation. When run, they generate files in the build directory with code coverage metrics. See Section 30.4 for more information. This option is for use only with GCC and when doing development work.

    如果使用GCC编译,所有的程序和库被编译成 代码覆盖测试仪器。运行时,他们 在代码覆盖度量的编译库中产生文件。See Section 30.4 for more information.此选项只与GCC一起使用并且是做开发工作中。

    --enable-profiling

    如果使用GCC,所有程序和库都被编译用以,这样才能对其进行分析。 在后台出口,将创建一个子目录(包含gmon.out文件)用于分析使用。 此选项只与GCC一起使用并且是做开发工作中。

    --enable-cassert

    打开在服务器中的assertion检查,它会检查许多"cannot happen"的条件。 它对于代码开发的用途而言是无价之宝,不过这些测试会显著减缓服务器。 并且,打开这个测试不会提高系统的稳定性! 这些assertion检查并不是按照错误的严重性分类的, 因此一些相对无害的小问题也可能导致服务器重启 (只要它触发了一次assertion失败)。 目前,我们不推荐在生产中使用这个选项, 但是如果你在做开发或者在使用beta版本的时候应该打开它。

    --enable-depend

    打开自动倚赖性跟踪。 如果打开这个选项, 那么makefile文件将设置为在任何头文件被修改的时候都将重新编译所有受影响的目标文件。 如果你在做开发的工作,那么这个选项很有用,但是如果你只是想编译一次并且安装, 那这么做就是浪费时间。目前,这个选项只有在你使用GCC的时候才管用。

    --enable-dtrace

    编译PostgreSQL,支持动态跟踪工具DTrace。 参阅See Section 27.4. 经常需要通过设置DTRACE环境变量来指向dtrace程序。 因为dtrace通常安装在/usr/sbin中,而该目录一般不在搜索路经中。 可以通过环境变量DTRACEFLAGS来声明dtrace程序的其他命令行选项。 在Solaris平台上,要包含64位DTrace支持,需要指定DTRACEFLAGS="-64" , 比如,使用GCC编译:

    ./configure CC='gcc -m64' --enable-dtrace DTRACEFLAGS='-64' ...

    在使用Sun编译器的时候:

    ./configure CC='/opt/SUNWspro/bin/cc -xtarget=native64' --enable-dtrace DTRACEFLAGS='-64' ...

    如果你喜欢使用不同于configure找出来的C编译器, 可以将环境变量CC设置为你选择的程序。 缺省时,configure将选择gcc(只要可用), 或者是该平台的缺省选择(通常是cc),如果需要的话,你也可以用CFLAGS覆盖缺省编译器标志。

    你可以在configure命令行上声明环境变量,比如:

        ./configure CC=/opt/bin/gcc CFLAGS='-O2 -pipe'
        

    下面是一些重要的环境变量列表:

    BISON

    Bison 程序

    CC

    C编译器命令

    CFLAGS

    指向C编译器的选项

    CPP

    C预处理器

    CPPFLAGS

    指向C预处理器的选项

    DTRACE

    dtrace程序的位置

    DTRACEFLAGS

    指向dtrace程序的选项

    FLEX

    Flex 程序

    LDFLAGS

    连接可执行文件或共享库时可用的选项

    LDFLAGS_EX

    仅用于连接可执行文件的附加选项

    LDFLAGS_SL

    仅连接共享库的附加选项

    MSGFMT

    为本地语言支持的msgfmt程序

    PERL

    Perl解释器的完整路径,用于确定编译PL/Perl的依赖关系。

    PYTHON

    Python解释器的完整路径。用于确定编译PL/Python的依赖关系。 在这里,需要指出的一点是,Python 2或3(或其他隐式选择)可以决定哪种PL/Python的变种语言可用。 参阅 Section 42.1获得更多详细信息。

    TCLSH

    Tcl解释器的完整路径。用于确定编译PL/Tcl的依赖关系, 并且,它将代替Tcl脚本。

    XML2_CONFIG

    xml2-config用于定位libxml的安装。

  2. 编译

    要开始编译,输入:

    gmake

    (一定要记得用GNU make.) 依硬件不同,编译过程需要的时间也不同。 显示的最后一行应该是:

    All of PostgreSQL is successfully made. Ready to install.

    如果你想编译所有可以编译的,包括 文档(HTML和手册页),附加模块 (contrib),输入:

    gmake world

    显示最后一行应该是:

    PostgreSQL, contrib and HTML documentation successfully made. Ready to install.

  3. 回归测试

    如果你想在安装文件前测试新编译的服务器,那么你可以在这个时候运行回归测试。 回归测试是一个用于验证PostgreSQL在系统上是否按照开发人员设想的那样运行的测试套件 输入:

    gmake check

    这条命令不能用root用户执行,需要以非特权用户运行该命令。 Chapter 30 contains 包含关于如何解释测试结果的详细信息。 你可以在以后的任何时间通过执行这条命令来运行这个测试。

  4. 安装文件

    Note: 如果你正在升级一套现有的系统并且准备把新文件覆盖在旧文件上面, 那么要记得在覆盖之前备份数据并关闭旧服务器, 像之前在Section 15.4里面解释的那样。

    要安装PostgreSQL ,输入:

    gmake install

    这条命令将把文件安装到在step 1声明的目录里面去。 确保你对那个目录有足够的权限以写入。 通常需要用root用户(或有root权限的用户)来执行该命令, 当然,也可以先创建目标目录,然后给该用户分配足够的,在该目录上的权限。

    文档(HTML和手册页)的安装,输入:

        gmake install-docs
        

    如果要安装所有的可以安装的,输入:

    gmake install-world

    该命令也会安装文档文件。

    gmake install-strip命令代替gmake install命令, 可以在安装可执行文件和库文件时把它们的调试信息抽取掉,这样可以节约一些磁盘空间。 如果你编译时带着调试支持,那么该命令将删除调试支持,因此我们应该只是在不再需要调试的时候使用。 install-strip力图做一些合理的事情来节约空间, 但是它并不知道如何从可执行文件中抽取每个不需要的字节, 因此,如果你希望节约所有可能节约的磁盘空间,那么你可以手工做些处理。

    标准的安装提供所有客户端应用开发和服务器端的程序开发的头文件, 比如用C写的通用函数或者数据类型的头文件。(PostgreSQL8.0之前,后者需要一个单独的gmake install-all-headers命令, 现在标准安装中一包含了这一步。)

    只安装客户端. 如果你只想装客户应用和接口库,那么你可以用下面的命令:

    gmake -C src/bin install
    gmake -C src/include install
    gmake -C src/interfaces install
    gmake -C doc install

    src/bin中有一些仅供服务器使用的二进制文件,但是它们都很小。

Windows上注册eventlog. 要在该操作系统上注册一个Windows eventlog库, 在安装完毕之后执行下面的命令:

    regsvr32 pgsql_library_directory/pgevent.dll
    

这样就创建了一个用于事件查看器的注册表项目。

卸载. 可以使用gmake uninstall命令进行卸载,不过这样不会删除创建出来的目录。

清理. 在安装完成以后,可以通过在源码树里面用命令gmake clean删除编译过程文件来释放磁盘空间。 这样会保留configure程序生成的文件,这样以后你就可以用gmake命令重新编译所有东西。 要把源码树恢复为发布时的状态,用gmake distclean命令。 如果你想从同一棵源码树上为多个不同平台编译,你就一定要运行这条命令并且为每个平台重新配置。 另外,在每种系统上使用一套独立的编译树,这样源代码树就可以保留不被更改。

如果你执行了一次编译,然后发现你的configure选项是错误的, 或者你修改了configure所探测到的东西(比如升级了软件), 那么在重新配置和编译之前运行一下gmake distclean是个好习惯。 如果不做这个事情,你修改的配置选项可能无法生效。

上一篇: 下一篇: