目錄 搜尋
前言 何为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.8. 特殊平台的要求

本章节是讲在一些特殊平台上的PostgreSQL的安装和设置。 一定要阅读安装说明,尤其是Section 15.2。 依据回归测试结果的说明,检测 Chapter 30。

对于本章节没有提到的使用平台,它们不存在以下这些特殊的平台所要注意的问题。

15.8.1. AIX

虽然PostgreSQL可以在AIX上正常工作运行,但如何能正确安装却是一个难点。 AIX的版本中,已知的,能够支持的版本范围是从4.3.3到6.1。 你可以使用GCC或本地的IBM编译器xlc。 一般情况下,使用最新版本的AIX和PostgreSQL就可以。 根据那些已知的,可以支持PostgreSQL的AIX版本号来判断应该使用的AIX版本。

支持AIX版本的最低安装级别:

AIX 4.3.3

Maintenance Level 11 + post ML11 bundle

AIX 5.1

Maintenance Level 9 + post ML9 bundle

AIX 5.2

Technology Level 10 Service Pack 3

AIX 5.3

Technology Level 7

AIX 6.1

Base Level

查看AIX的版本、发行号、ML(Maintenance Level)级别: 4.3.3到5.2 ML 7之间的版本,使用oslevel -r;之后的版本使用oslevel -s

如果您已经在/usr/local安装了Readline或者libz,除了你自己,使用以下configure参数: --with-includes=/usr/local/include --with-libraries=/usr/local/lib

15.8.1.1. GCC问题

在AIX5.3中,使用GCC编译和运行PostgreSQL存在一些问题。

你将要使用GCC 3.3.2及其之后的版本,特别是当使用的是预打包版。4.0.1版已被验证通过。 早期版本存在的问题似乎与IBM包装GCC方式比GCC实际问题更有关,所以,如果你自己编译GCC,你很可能会用GCC早期版本。

15.8.1.2. Unix-domain sockets broken 打破UNIX域套接字

AIX5.3中有一个问题, 在sockaddr_storage不定义足够大。在5.3版本中,IBM增加了sockaddr_un的大小, 地址为Unix域套接字组织结构, ,但并没有相应增加sockaddr_storage的大小。 这一结果尝试使用Unix域套接字的PostgreSQL 导致libpq溢出数据结构。 TCP/IP连接运行良好,但没有Unix域套接字, 从而避免工作中回归测试。

问题报道给IBM,并记录错误报告PMR29657。如果升级到维护级别5300-03或更高版本, 这将包括此修复程序。 一个快速的解决方法是在/usr/include/sys/socket.h中 改变_SS_MAXSIZE到1025。在这两种情况下,一旦你有校正的头文件,重新编译PostgreSQL。

15.8.1.3. 因特网地址问题

PostgreSQL依赖于系统的getaddrinfo功能 解析listen_addressespg_hba.conf等中的IP地址。 旧版本的AIX此功能有各类缺陷。如果你有有关这些设置的问题, 更新上面显示的适当AIX修复级别,应该处理它。

一个用户报告:

在AIX5.3上运行PostgreSQL8.1版本时,we periodically ran into problems where the statistics collector would "mysteriously" not come up successfully. 这似乎是在IPv6实施的意外行为结果。它看起来像PostgreSQL和IPv6,不能很好地结合在AIX 5.3上。

任何以下执行"fix"问题。

  • 删除对localhost的IPv6地址:

    (as root)
    # ifconfig lo0 inet6 ::1/0 delete

  • 删除IPv6的网络服务。 AIX上的文件/etc/netsvc.conf大致 相当于在Solaris/Linux上的/etc/nsswitch.conf。 缺省情况下,在AIX上,因此:

    hosts=local,bind

    替换:

    hosts=local4,bind4

    停用IPv6地址。

这的确是一个 有关IPv6支持不成熟问题的解决方法,在AIX5.3版本有明显改善 它曾运行与AIX5.3版本,但并不代表一个良好的解决问题的方法。 据报道,此方法不仅不必要,但在AIX 6.1,支持IPv6变得更加成熟出现问题。

15.8.1.4. 内存管理

AIX有些独特的内存管理方式。你可以有多倍数RAM千兆字节的服务器,当正运行应用程序时,但仍需摆脱内存或地址 空间错误。createlang没有不寻常错误的一个例子。 例如,运行PostgreSQL安装的所有者:

-bash-3.00$ createlang plperl template1
createlang: language installation failed: ERROR:  could not load library "/opt/dbs/pgsql748/lib/plperl.so": A memory address is not in the address space for the process.

在PostgreSQL安装过程时作为一个非所有者运行:

-bash-3.00$ createlang plperl template1
createlang: language installation failed: ERROR:  could not load library "/opt/dbs/pgsql748/lib/plperl.so": Bad address

另一个例子是PostgreSQL服务器日志没有内存错误, 每个内存分配接近或大于256MB。

所有这些问题的原因是默认bittedness 和服务器进程使用的内存模型。缺省情况下,所有 在AIX上编译的二进制是32位。这并不取决于 硬件类型或内核使用。这些32位进程限于使用 几个模型的256MB段中展开的4GB内存。缺省情况下允许堆中共享堆栈中的单段小于256MB。

createlang例子,上面的情况, 检查你的umask和PostgreSQL安装中二进制文件的权限 。在这个例子中涉及的二进制文件是 32位和安装模式是750而不是755。由于 以这种方式设置权限,只有所有者或拥有组成员 可以加载库。因为它不是众人可读的, 加载者将对象放入过程堆,而不是共享库段,否则被放置。

"ideal"这个解决方案是使用64位 编译的PostgreSQL,但并不总是可行的,因为 32位处理器的系统可以编译,但不能运行64位 二进制文件。

如果需要一个32位二进制,设置LDR_CNTRL to MAXDATA=0xn0000000,即1 <= n <= 8, 开始PostgreSQL服务器之前,并且尝试不同的值和postgresql.conf设置找到令人满意的配置。 LDR_CNTRL的使用告诉AIX,希望 服务器为堆预留MAXDATA字节,分配256MB的段。当你找到一个可行 配置,ldedit可以用来修改二进制文件,所以 他们默认使用所需的堆大小。 PostgreSQL也可以重新编译 ,通过configure LDFLAGS="-Wl,-bmaxdata:0xn0000000"获得同样的效果。

对于64位编译,设置OBJECT_MODE到64,并且通过CC="gcc -maix64"LDFLAGS="-Wl,-bbigtoc"configure。(xlc选项可能不同。) 如果你省略了OBJECT_MODE出口,你的编译链接错误可能失败。 当OBJECT_MODE设置了,它告诉AIX编译实用程序,比如 ar, as, 和ld,默认处理的对象类型。

缺省情况下,过量的分页空间可能发生。虽然我们有 没有看到这种情况发生,当用完 内存和访问过量,AIX将杀死进程。 这最接近我们所看到的叉失败,因为系统的决定,另一个进程没有足够的内存。 像其他许多AIX,如果这成为一个问题,分页空间分配方法和out-of-memory kill 在系统或全过程基础上可配置的。

参考资料

"Large Program Support", AIX Documentation: General Programming Concepts: Writing and Debugging Programs AIX文档:通用编程概念:编写并调试程序.

"Program Address Space Overview", AIX Documentation: General Programming Concepts: Writing and Debugging Programs AIX文档:通用编程概念:编写并调试程序.

"Performance Overview of the Virtual Memory Manager (VMM)", AIX Documentation: Performance Management Guide AIX文档:性能管理指南.

"Page Space Allocation", AIX Documentation: Performance Management Guide AIX文档:性能管理指南.

"Paging-space thresholds tuning", AIX Documentation: Performance Management Guide AIX文档:性能管理指南.

Developing and Porting C and C++ Applications on AIX, IBM Redbook.

15.8.2. Cygwin

PostgreSQL可使用Cygwin编译,像一个Linux环境的 Windows,但这种方法不如本地的Windows编译,(see Chapter 16) 不再推荐。

当继续按照正常的安装过程从源代码编译时,(即./configure; make等),注意到以下Cygwin的具体不同之处:

  • Windows实用程序之前使用Cygwin的bin目录设置您的路径, 这将有助于防止汇编问题。

  • 被称为GNU的make命令make, 不是gmake

  • adduser命令不被支持, 在Windows NT ,2000或XP上使用适当的用户管理应用。否则,跳过这一步。

  • su命令不被支持;在Windows NT,2000或XP上使用ssh模拟su。否则,跳过这一步。

  • OpenSSL不支持。

  • 开始cygserver共享内存支持。 要做到这一点,键入命令/usr/sbin/cygserver &。此程序需要随时运行 启动PostgreSQL服务器或初始化一个数据库集群 (initdb)。 缺省cygserver配置可能需要 被改变(例如,增加SEMMNS) 防止PostgreSQL的失败,由于缺乏系统资源。

  • 并行的回归测试(make check) 可以产生虚假回归测试失败,由于溢出 listen()储存队列, 这会导致连接拒绝错误或挂起。您可以限制 使用make变量MAX_CONNECTIONS的连接数,因此:

    make MAX_CONNECTIONS=5 check

    (在某些系统上,你可以有多达约10个同步连接)。

它可以安装cygserver和 PostgreSQL服务器作为Windows NT服务。关于如何要做到这一点的信息, 请参阅README文件,包括在Cygwin中的PostgreSQL的二进制包。它被安装在目录/usr/share/doc/Cygwin

15.8.3. HP-UX

PostgreSQL 7.3+在系列700/800的PA-RISC机器 运行HP-UX 10.x或11.X,给予相应的系统补丁级别 和编译工具。至少有一个开发人员经常在HP-UX 10.20测试,我们有在HP-UX 11.00和11.11上成功安装报告。

除了PostgreSQL源分布,你将需要GNU(惠普的牌子不会做),GCC或惠普的完整ANSI C编译器。 如果你打算从Git源编译,而不是发布包,你还需要(GNU lex)和Bison (GNU yacc)。我们还建议,确定你是最新的HP修补程序。至少,如果你正在HP-UX11.11上编译64 位二进制,您可能需要PHSS_30966 (11.11)或 后继补丁,否则initdb可能会挂起:

如果您正在PA-RISC 2.0机上编译,并希望有 使用GCC的64位二进制代码,您必须使用GCC 64位版本。HP-UX PA-RISC和Itanium的GCC二进制 文件都可以从 http://www.hp.com/go/gcc获得。不要忘了同时获取并安装binutils。

如果你正在PA-RISC 2.0机上编译,并希望编译的 二进制在PA-RISC 1.1机器上运行,你将需要在CFLAGS声明+DAportable

如果你正在HP-UX Itanium机器编译,您将需要依赖于补丁或后继 修补程序的最新HP ANSI C编译器。

PHSS_30848  s700_800 HP C Compiler (A.05.57)
PHSS_30849  s700_800 u2comp/be/plugin library Patch

如果你有惠普的C编译器和GCC的,那么, 当运行configure时,你可能想 明确选择使用的编译器:

./configure CC=cc

惠普的C编译器,或

./configure CC=gcc

为GCC。如果省略此设置,然后配置 选择gcc如果它有一个选择。

缺省安装目标位置是/usr/local/pgsql,你可能想 改变在/opt中的东西。如果是这样,使用 --prefix切换到configure

在回归测试中,可能会有一些几何测试的低阶位数差异 ,它依赖于你使用的编译器和数学库版本。任何其他的错误引起怀疑。

15.8.4. IRIX

PostgreSQL已成功地运行在MIPS R8000, r10000(ip25和ip27)和r12000(ip35)处理器,运行 IRIX的6.5.5m,6.5.12,6.5.13,和6.5.26与MIPSPro编译器 版本7.30,7.3.1.2m,7.3,和7.4.4m。

你将需要MIPSPro完整的ANSI C编译器。有 试图用GCC编译的问题。这是一个与返回 某些结构的使用函数相关的已知的GCC错误(非 固定为3.0版本)。此漏洞影响inet_ntoa, inet_lnaof, inet_netof, inet_makeaddr, 和semctl的功能。它应该被固定,通过强制代码到连接libgcc的这些功能。 但一直没有这样做过测试。

据了解,7.4.1m版本的MIPSPro编译器生成 不正确的代码。当试图启动数据库,症状是"无效的主要检查站点 记录")。版本7.4.4m 是确定的;中间版本的状态是不确定的。

可能有类似下面的编译问题:

cc-1020 cc: ERROR File = pqcomm.c, Line = 427
  The identifier "TCP_NODELAY" is undefined.

                if (setsockopt(port->sock, IPPROTO_TCP, TCP_NODELAY,

一些版本中包括在sys/xti.h的TCP定义 ,所以在src/backend/libpq/pqcomm.csrc/interfaces/libpq/fe-connect.c中 添加#include <sys/xti.h>是必须的, 如果您遇到这一点,请让我们知道,我们可以制定一个适当修复。

在回归测试中,可能会有一些几何测试的低阶位数差异,它依赖于你使用的FPU。任何其他的错误引起怀疑。

15.8.5. MinGW/Native Windows

用于Windows的PostgreSQL可以使用MinGW编译,一个类似Unix开发 微软操作系统的环境,或使用 微软Visual C++编译器套件。 MinGW的开发变种使用本章描述的标准编译系统; Visual C++开发运行完全不同和在Chapter 16中描述。 这是一个完全本地开发,并且不使用附加软件,如 MinGW。在主要的PostgreSQL网站上可利用已有安装。

本地Windows端口需要Windows 2000或更高的32位或64位版本。早期的操作系统 没有足够的基础设施(但Cygwin可以用 )。MinGW,类似Unix的构建工具,和MSYS,Unix工具集合 需要运行像configureshell脚本, 可从http://www.mingw.org/下载。 不需要运行所产生的二进制文件,他们需要创建二进制文件。

你安装所有东西后,建议您根据CMD.EXE 运行psql ,因为MSYS控制台存在缓冲问题。

15.8.6. SCO OpenServer and SCO UnixWare

PostgreSQL可以建立在SCO UnixWare7和SCO OpenServer5上。 在OpenServer上,你可以使用OpenServer开发工具包 或通用的开发工具包。然而,一些调整可能 需要,如下所述。

15.8.6.1. Skunkware

你应该找到SCO Skunkware CD副本。 Skunkware CD包括UnixWare 7和OpenServer 5当前版本 。Skunkware包括互联网上可用的许多受欢迎方案的现成安装版本。 例如,gzip, gunzip, GNU Make, Flex,和Bison都 包括在内。 UnixWare7.1,此CD目前标记为开放许可软件增补,如果你没有这个CD,来自http://www.sco.com/skunkware/的软件是可用的。

为UnixWare和OpenServer,Skunkware有不同的版本。 确保为您的操作系统安装正确的版本,除下文所述。

在UnixWare 7.1.3和之外,GCC编译器包含在 UDK CD中的是GNU Make。

15.8.6.2. GNU Make

你需要使用GNU make程序,这些在Skunkware CD上 。缺省情况下,它作为/usr/local/bin/make安装。为了避免 与SCOmake程序混淆,你可能要重新命名GNUmakegmake

UnixWare 7.1.3及以上,GNU Make程序是UDK CD的OSTK部分,是在/usr/gnu/bin/gmake文件中。

15.8.6.3. Readline

Readline库在Skunkware CD上。但它并不包含在UnixWare 7.1 Skunkware CD上。如果你有 UnixWare 7.0.0或7.0.1 Skunkware CDs,您可以从 那里安装它。否则,尝试http://www.sco.com/skunkware/。

缺省情况下,Readline安装到/usr/local/lib/usr/local/include。然而, PostgreSQLconfigure程序没有帮助将无法找到它 。如果你安装ReadLine,然后使用 下列选项到configure:

./configure --with-libraries=/usr/local/lib --with-includes=/usr/local/include

15.8.6.4. 在OpenServer上使用UDK

如果您正在OpenServer上使用新的通用开发工具包(UDK)编译器 ,你需要声明UDK库的位置:

./configure --with-libraries=/udk/usr/lib --with-includes=/udk/usr/include

把上面的ReadLine选项放在一起:

./configure --with-libraries="/udk/usr/lib /usr/local/lib" --with-includes="/udk/usr/include /usr/local/include"

15.8.6.5. 阅读PostgreSQL手册页

缺省情况下,PostgreSQL手册页安装到 /usr/local/pgsql/man。缺省情况下,UnixWare 不查看手册页。为了能读,你需要在/etc/default/man文件中修改 MANPATH的变量,例如:

OpenServer上,一些额外研究需要投入使手册页可用,因为帮助系统不同于其他平台。目前,PostgreSQL不安装它们。

15.8.6.6. 7.1.1b的C99问题功能补充

比OpenUNIX 8.0.0发布的更早的编译器 (UnixWare 7.1.2),包括7.1.1b功能补充,可能需要在CFLAGS或者CC 环境变量中指定-Xb。在编译tuplesort.c引用联 功能中,这一指示是一个错误。在7.1.2(8.0.0)编译器和之上显然是一个改变。

15.8.6.7. 在UnixWare上的线程

为线程,你一定全部使用libpq的程序上使用-Kpthread。 libpq使用pthread_*调用,这是唯一与-Kpthread/-Kthread标志可用的。

15.8.7. Solaris

PostgreSQL是Solaris上的良好支持。更新您的 操作系统越多,您遇到的问题越少;细节如下。

请注意,PostgreSQL与Solaris 10(更新2)捆绑在一起。 在http://pgfoundry.org/projects/solarispackages/上的官方包可用。 旧的Solaris版本(8, 9)的软件包,你能从http://www.sunfreeware.com/或者 http://www.blastwave.org/获得。

15.8.7.1. 所需工具

您可以建立与GCC或Sun的编译器套件。为 更好的代码优化,强烈建议Sun的编译器放 在SPARC架构上。当建议使用GCC 2.95.1; gcc 2.95.3或更高版本时,我们可听到问题报告。如果 您正在使用Sun的编译器,要小心,不要选择/usr/ucb/cc文件;使用/opt/SUNWspro/bin/cc文件。

你可以从http://developers.sun.com/sunstudio/downloads/那下载Sun Studio。 许多GNU工具都集成到Solaris 10,或者他们 存在于Solaris配套光盘上。如果你想要Solaris旧版本的包,你可以在 http://www.sunfreeware.com 或者http://www.blastwave.org找到这些工具。如果你想要源代码,可查阅http://www.gnu.org/order/ftp.html。

15.8.7.2. OpenSSL问题

当您建立PostgreSQL与OpenSSL支持时,你可能会得到 下列文件中的编译错误:

  • src/backend/libpq/crypt.c

  • src/backend/libpq/password.c

  • src/interfaces/libpq/fe-auth.c

  • src/interfaces/libpq/fe-connect.c

这是由于在标准/usr/include/crypt.h文件头部和由OpenSSL提供的头文件之间的命名空间冲突。

升级你的OpenSSL安装到版本0.9.6a,以修复这个 问题。 Solaris 9和以上有OpenSSL的较新版本。

15.8.7.3. 关于失败测试的编译故障

如果configure对一个失败的测试程序报错, 这可能是一个运行时链接的情况, 无法找到一些库,libz, libreadline或某些 其他非标准库,如libssl。它指向 正确的位置,在configure命令行设置LDFLAGS的环境 变量,例如,

configure ... LDFLAGS="-R /usr/sfw/lib:/opt/sfw/lib:/usr/local/lib"

参阅ld手册页获得更多的信息。

15.8.7.4. 一些64位编译故障

在Solaris7及以上,libc的64位版本有一个错误 vsnprintf程序,从而导致不稳定 核心转储在PostgreSQL中。已知的最简单的解决办法是 强迫PostgreSQL利用其vsnprintf的自身版本,而不是 库副本。要做到这一点,之后运行configure编辑一个通过configure产生的文件: 在src/Makefile.global文件中,更改线路

LIBOBJS =

用来读

LIBOBJS = snprintf.o

(有可能是已经列在这个变量中的其他文件。顺序并不重要。)然后像往常一样建立。

15.8.7.5. 编译最佳性能

在SPARC架构上,Sun Studio强烈推荐汇编。尝试使用-xO5优化 标志生成速度明显加快的二进制文件。不使用任何 浮点运算修改行为的标志和errno的处理(例如, -fast)。这些标志可以提高一些非标准PostgreSQL行为,例如日期/时间计算。

如果你没有使用SPARC上64位二进制和选择32位版本的原因, 。64位操作速度较慢,64位二进制慢于32位的。 另一方面,在AMD64 CPU上32位代码不是本地的, 这就是32位代码显著慢于这个CPU的原因。

一些调节PostgreSQL的技巧和Solaris性能可以在http://www.sun.com/servers/coolthreads/tnb/applications_postgresql.jsp 中找到。本文主要侧重于T2000平台,但有关Solaris的其他硬件的许多建议很有用。

15.8.7.6. 使用DTrace跟踪PostgreSQL<

是的,使用DTrace是可能的。参阅 Section 27.4获得更多的信息。你也能在文章http://blogs.sun.com/robertlor/entry/user_level_dtrace_probes_in 中查找更多的信息。

如果你看到postgres链接可执行中止 错误信息,如

Undefined                       first referenced
 symbol                             in file
AbortTransaction                    utils/probes.o
CommitTransaction                   utils/probes.o
ld: fatal: Symbol referencing errors. No output written to postgres
collect2: ld returned 1 exit status
gmake: *** [postgres] Error 1

您的DTrace安装太旧而不能处理静态函数的探查。你需要Solaris 10u4或更高版本。

上一篇: 下一篇: