目录搜索
前言何为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和OFFSET7.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 BY11.5. 组合多个索引11.6. 唯一索引11.7. 表达式上的索引11.8. 部分索引11.9. 操作类和操作簇11.10. 检查索引的使用章12. Full Text Search12.1. Introduction12.2. Tables and Indexes12.3. Controlling Text Search12.4. Additional Features12.5. Parsers12.6. Dictionaries12.7. Configuration Example12.8. Testing and Debugging Text Search12.9. GiST and GIN Index Types12.10. psql Support12.11. Limitations12.12. Migration from Pre-8.3 Text Search章13. 并发控制13.1. 介绍13.2. 事务隔离13.3. 明确锁定13.4. 应用层数据完整性检查13.5. 锁和索引章14. 性能提升技巧14.1. 使用EXPLAIN14.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 Windows16.1. Building with Visual C++ or the Platform SDK16.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 Tests30.1. Running the Tests30.2. Test Evaluation30.3. Variant Comparison Files30.4. Test Coverage ExaminationIV. 客户端接口章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 C33.1. The Concept33.2. Connecting to the Database Server33.3. Closing a Connection33.4. Running SQL Commands33.5. Choosing a Connection33.6. Using Host Variables33.7. Dynamic SQL33.8. pgtypes library33.9. Using Descriptor Areas33.10. Informix compatibility mode33.11. Error Handling33.12. Preprocessor directives33.13. Processing Embedded SQL Programs33.14. Library Functions33.15. Internals章34. 信息模式34.1. 关于这个模式34.2. 数据类型34.3. information_schema_catalog_name34.4. administrable_role_authorizations34.5. applicable_roles34.6. attributes34.7. check_constraint_routine_usage34.8. check_constraints34.9. column_domain_usage34.10. column_privileges34.11. column_udt_usage34.12. 字段34.13. constraint_column_usage34.14. constraint_table_usage34.15. data_type_privileges34.16. domain_constraints34.18. domains34.17. domain_udt_usage34.19. element_types34.20. enabled_roles34.21. foreign_data_wrapper_options34.22. foreign_data_wrappers34.23. foreign_server_options34.24. foreign_servers34.25. key_column_usage34.26. parameters34.27. referential_constraints34.28. role_column_grants34.29. role_routine_grants34.30. role_table_grants34.31. role_usage_grants34.32. routine_privileges34.33. routines34.34. schemata34.35. sequences34.36. sql_features34.37. sql_implementation_info34.38. sql_languages34.39. sql_packages34.40. sql_parts34.41. sql_sizing34.42. sql_sizing_profiles34.43. table_constraints34.44. table_privileges34.45. tables34.46. triggered_update_columns34.47. 触发器34.48. usage_privileges34.49. user_mapping_options34.50. user_mappings34.51. view_column_usage34.52. view_routine_usage34.53. view_table_usage34.54. 视图V. 服务器端编程章35. 扩展SQL35.1. 扩展性是如何实现的35.2. PostgreSQL类型系统35.3. User-Defined Functions35.4. Query Language (SQL) Functions35.5. Function Overloading35.6. Function Volatility Categories35.7. Procedural Language Functions35.8. Internal Functions35.9. C-Language Functions35.10. User-Defined Aggregates35.11. User-Defined Types35.12. User-Defined Operators35.13. Operator Optimization Information35.14. Interfacing Extensions To Indexes35.15. 用C++扩展章36. 触发器36.1. 触发器行为概述36.3. 用 C 写触发器36.2. 数据改变的可视性36.4. 一个完整的例子章37. 规则系统37.1. The Query Tree37.2. 视图和规则系统37.3. 在INSERT,UPDATE和DELETE上的规则37.4. 规则和权限37.5. 规则和命令状态37.6. 规则与触发器得比较章38. Procedural Languages38.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 Hood39.11. 开发PL/pgSQL的一些提示39.12. 从OraclePL/SQL 进行移植章40. PL/Tcl - Tcl Procedural Language40.1. Overview40.2. PL/Tcl Functions and Arguments40.3. Data Values in PL/Tcl40.4. Global Data in PL/Tcl40.5. Database Access from PL/Tcl40.6. Trigger Procedures in PL/Tcl40.7. Modules and the unknown command40.8. Tcl Procedure Names章41. PL/Perl - Perl Procedural Language41.1. PL/Perl Functions and Arguments41.2. Data Values in PL/Perl41.3. Built-in Functions41.4. Global Values in PL/Perl41.6. PL/Perl Triggers41.5. Trusted and Untrusted PL/Perl41.7. PL/Perl Under the Hood章42. PL/Python - Python Procedural Language42.1. Python 2 vs. Python 342.2. PL/Python Functions42.3. Data Values42.4. Sharing Data42.5. Anonymous Code Blocks42.6. Trigger Functions42.7. Database Access42.8. Utility Functions42.9. Environment Variables章43. Server Programming Interface43.1. Interface FunctionsSpi-spi-connectSpi-spi-finishSpi-spi-pushSpi-spi-popSpi-spi-executeSpi-spi-execSpi-spi-execute-with-argsSpi-spi-prepareSpi-spi-prepare-cursorSpi-spi-prepare-paramsSpi-spi-getargcountSpi-spi-getargtypeidSpi-spi-is-cursor-planSpi-spi-execute-planSpi-spi-execute-plan-with-paramlistSpi-spi-execpSpi-spi-cursor-openSpi-spi-cursor-open-with-argsSpi-spi-cursor-open-with-paramlistSpi-spi-cursor-findSpi-spi-cursor-fetchSpi-spi-cursor-moveSpi-spi-scroll-cursor-fetchSpi-spi-scroll-cursor-moveSpi-spi-cursor-closeSpi-spi-saveplan43.2. Interface Support FunctionsSpi-spi-fnameSpi-spi-fnumberSpi-spi-getvalueSpi-spi-getbinvalSpi-spi-gettypeSpi-spi-gettypeidSpi-spi-getrelnameSpi-spi-getnspname43.3. Memory ManagementSpi-spi-pallocSpi-reallocSpi-spi-pfreeSpi-spi-copytupleSpi-spi-returntupleSpi-spi-modifytupleSpi-spi-freetupleSpi-spi-freetupletableSpi-spi-freeplan43.4. Visibility of Data Changes43.5. ExamplesVI. 参考手册I. SQL命令Sql-abortSql-alteraggregateSql-alterconversionSql-alterdatabaseSql-alterdefaultprivilegesSql-alterdomainSql-alterforeigndatawrapperSql-alterfunctionSql-altergroupSql-alterindexSql-alterlanguageSql-alterlargeobjectSql-alteroperatorSql-alteropclassSql-alteropfamilySql-alterroleSql-alterschemaSql-altersequenceSql-alterserverSql-altertableSql-altertablespaceSql-altertsconfigSql-altertsdictionarySql-altertsparserSql-altertstemplateSql-altertriggerSql-altertypeSql-alteruserSql-alterusermappingSql-alterviewSql-analyzeSql-beginSql-checkpointSql-closeSql-clusterSql-commentSql-commitSql-commit-preparedSql-copySql-createaggregateSql-createcastSql-createconstraintSql-createconversionSql-createdatabaseSql-createdomainSql-createforeigndatawrapperSql-createfunctionSql-creategroupSql-createindexSql-createlanguageSql-createoperatorSql-createopclassSql-createopfamilySql-createroleSql-createruleSql-createschemaSql-createsequenceSql-createserverSql-createtableSql-createtableasSql-createtablespaceSql-createtsconfigSql-createtsdictionarySql-createtsparserSql-createtstemplateSql-createtriggerSql-createtypeSql-createuserSql-createusermappingSql-createviewSql-deallocateSql-declareSql-deleteSql-discardSql-doSql-dropaggregateSql-dropcastSql-dropconversionSql-dropdatabaseSql-dropdomainSql-dropforeigndatawrapperSql-dropfunctionSql-dropgroupSql-dropindexSql-droplanguageSql-dropoperatorSql-dropopclassSql-dropopfamilySql-drop-ownedSql-droproleSql-dropruleSql-dropschemaSql-dropsequenceSql-dropserverSql-droptableSql-droptablespaceSql-droptsconfigSql-droptsdictionarySql-droptsparserSql-droptstemplateSql-droptriggerSql-droptypeSql-dropuserSql-dropusermappingSql-dropviewSql-endSql-executeSql-explainSql-fetchSql-grantSql-insertSql-listenSql-loadSql-lockSql-moveSql-notifySql-prepareSql-prepare-transactionSql-reassign-ownedSql-reindexSql-release-savepointSql-resetSql-revokeSql-rollbackSql-rollback-preparedSql-rollback-toSql-savepointSql-selectSql-selectintoSql-setSql-set-constraintsSql-set-roleSql-set-session-authorizationSql-set-transactionSql-showSql-start-transactionSql-truncateSql-unlistenSql-updateSql-vacuumSql-valuesII. 客户端应用程序App-clusterdbApp-createdbApp-createlangApp-createuserApp-dropdbApp-droplangApp-dropuserApp-ecpgApp-pgconfigApp-pgdumpApp-pg-dumpallApp-pgrestoreApp-psqlApp-reindexdbApp-vacuumdbIII. PostgreSQL服务器应用程序App-initdbApp-pgcontroldataApp-pg-ctlApp-pgresetxlogApp-postgresApp-postmasterVII. 内部章44. PostgreSQL内部概览44.1. 查询路径44.2. 连接是如何建立起来的44.3. 分析器阶段44.4. ThePostgreSQL规则系统44.5. 规划器/优化器44.6. 执行器章45. 系统表45.1. 概述45.2. pg_aggregate45.3. pg_am45.4. pg_amop45.5. pg_amproc45.6. pg_attrdef45.7. pg_attribute45.8. pg_authid45.9. pg_auth_members45.10. pg_cast45.11. pg_class45.12. pg_constraint45.13. pg_conversion45.14. pg_database45.15. pg_db_role_setting45.16. pg_default_acl45.17. pg_depend45.18. pg_description45.19. pg_enum45.20. pg_foreign_data_wrapper45.21. pg_foreign_server45.22. pg_index45.23. pg_inherits45.24. pg_language45.25. pg_largeobject45.26. pg_largeobject_metadata45.27. pg_namespace45.28. pg_opclass45.29. pg_operator45.30. pg_opfamily45.31. pg_pltemplate45.32. pg_proc45.33. pg_rewrite45.34. pg_shdepend45.35. pg_shdescription45.36. pg_statistic45.37. pg_tablespace45.38. pg_trigger45.39. pg_ts_config45.40. pg_ts_config_map45.41. pg_ts_dict45.42. pg_ts_parser45.43. pg_ts_template45.44. pg_type45.45. pg_user_mapping45.46. System Views45.47. pg_cursors45.48. pg_group45.49. pg_indexes45.50. pg_locks45.51. pg_prepared_statements45.52. pg_prepared_xacts45.53. pg_roles45.54. pg_rules45.55. pg_settings45.56. pg_shadow45.57. pg_stats45.58. pg_tables45.59. pg_timezone_abbrevs45.60. pg_timezone_names45.61. pg_user45.62. pg_user_mappings45.63. pg_views章46. Frontend/Backend Protocol46.1. Overview46.2. Message Flow46.3. Streaming Replication Protocol46.4. Message Data Types46.5. Message Formats46.6. Error and Notice Message Fields46.7. Summary of Changes since Protocol 2.047. PostgreSQL Coding Conventions47.1. Formatting47.2. Reporting Errors Within the Server47.3. Error Message Style Guide章48. Native Language Support48.1. For the Translator48.2. For the Programmer章49. Writing A Procedural Language Handler章50. Genetic Query Optimizer50.1. Query Handling as a Complex Optimization Problem50.2. Genetic Algorithms50.3. Genetic Query Optimization (GEQO) in PostgreSQL50.4. Further Reading章51. 索引访问方法接口定义51.1. 索引的系统表记录51.2. 索引访问方法函数51.3. 索引扫描51.4. 索引锁的考量51.5. 索引唯一性检查51.6. 索引开销估计函数章52. GiST Indexes52.1. Introduction52.2. Extensibility52.3. Implementation52.4. Examples52.5. Crash Recovery章53. GIN Indexes53.1. Introduction53.2. Extensibility53.3. Implementation53.4. GIN tips and tricks53.5. Limitations53.6. Examples章54. 数据库物理存储54.1. 数据库文件布局54.2. TOAST54.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 ConformanceD.1. Supported FeaturesD.2. Unsupported FeaturesE. Release NotesRelease-0-01Release-0-02Release-0-03Release-1-0Release-1-01Release-1-02Release-1-09Release-6-0Release-6-1Release-6-1-1Release-6-2Release-6-2-1Release-6-3Release-6-3-1Release-6-3-2Release-6-4Release-6-4-1Release-6-4-2Release-6-5Release-6-5-1Release-6-5-2Release-6-5-3Release-7-0Release-7-0-1Release-7-0-2Release-7-0-3Release-7-1Release-7-1-1Release-7-1-2Release-7-1-3Release-7-2Release-7-2-1Release-7-2-2Release-7-2-3Release-7-2-4Release-7-2-5Release-7-2-6Release-7-2-7Release-7-2-8Release-7-3Release-7-3-1Release-7-3-10Release-7-3-11Release-7-3-12Release-7-3-13Release-7-3-14Release-7-3-15Release-7-3-16Release-7-3-17Release-7-3-18Release-7-3-19Release-7-3-2Release-7-3-20Release-7-3-21Release-7-3-3Release-7-3-4Release-7-3-5Release-7-3-6Release-7-3-7Release-7-3-8Release-7-3-9Release-7-4Release-7-4-1Release-7-4-10Release-7-4-11Release-7-4-12Release-7-4-13Release-7-4-14Release-7-4-15Release-7-4-16Release-7-4-17Release-7-4-18Release-7-4-19Release-7-4-2Release-7-4-20Release-7-4-21Release-7-4-22Release-7-4-23Release-7-4-24Release-7-4-25Release-7-4-26Release-7-4-27Release-7-4-28Release-7-4-29Release-7-4-3Release-7-4-30Release-7-4-4Release-7-4-5Release-7-4-6Release-7-4-7Release-7-4-8Release-7-4-9Release-8-0Release-8-0-1Release-8-0-10Release-8-0-11Release-8-0-12Release-8-0-13Release-8-0-14Release-8-0-15Release-8-0-16Release-8-0-17Release-8-0-18Release-8-0-19Release-8-0-2Release-8-0-20Release-8-0-21Release-8-0-22Release-8-0-23Release-8-0-24Release-8-0-25Release-8-0-26Release-8-0-3Release-8-0-4Release-8-0-5Release-8-0-6Release-8-0-7Release-8-0-8Release-8-0-9Release-8-1Release-8-1-1Release-8-1-10Release-8-1-11Release-8-1-12Release-8-1-13Release-8-1-14Release-8-1-15Release-8-1-16Release-8-1-17Release-8-1-18Release-8-1-19Release-8-1-2Release-8-1-20Release-8-1-21Release-8-1-22Release-8-1-23Release-8-1-3Release-8-1-4Release-8-1-5Release-8-1-6Release-8-1-7Release-8-1-8Release-8-1-9Release-8-2Release-8-2-1Release-8-2-10Release-8-2-11Release-8-2-12Release-8-2-13Release-8-2-14Release-8-2-15Release-8-2-16Release-8-2-17Release-8-2-18Release-8-2-19Release-8-2-2Release-8-2-20Release-8-2-21Release-8-2-3Release-8-2-4Release-8-2-5Release-8-2-6Release-8-2-7Release-8-2-8Release-8-2-9Release-8-3Release-8-3-1Release-8-3-10Release-8-3-11Release-8-3-12Release-8-3-13Release-8-3-14Release-8-3-15Release-8-3-2Release-8-3-3Release-8-3-4Release-8-3-5Release-8-3-6Release-8-3-7Release-8-3-8Release-8-3-9Release-8-4Release-8-4-1Release-8-4-2Release-8-4-3Release-8-4-4Release-8-4-5Release-8-4-6Release-8-4-7Release-8-4-8Release-9-0Release-9-0-1Release-9-0-2Release-9-0-3Release-9-0-4F. 额外提供的模块F.1. adminpackF.2. auto_explainF.3. btree_ginF.4. btree_gistF.5. chkpassF.6. citextF.7. cubeF.8. dblinkContrib-dblink-connectContrib-dblink-connect-uContrib-dblink-disconnectContrib-dblinkContrib-dblink-execContrib-dblink-openContrib-dblink-fetchContrib-dblink-closeContrib-dblink-get-connectionsContrib-dblink-error-messageContrib-dblink-send-queryContrib-dblink-is-busyContrib-dblink-get-notifyContrib-dblink-get-resultContrib-dblink-cancel-queryContrib-dblink-get-pkeyContrib-dblink-build-sql-insertContrib-dblink-build-sql-deleteContrib-dblink-build-sql-updateF.9. dict_intF.10. dict_xsynF.11. earthdistanceF.12. fuzzystrmatchF.13. hstoreF.14. intaggF.15. intarrayF.16. isnF.17. loF.18. ltreeF.19. oid2nameF.20. pageinspectF.21. passwordcheckF.22. pg_archivecleanupF.23. pgbenchF.24. pg_buffercacheF.25. pgcryptoF.26. pg_freespacemapF.27. pgrowlocksF.28. pg_standbyF.29. pg_stat_statementsF.30. pgstattupleF.31. pg_trgmF.32. pg_upgradeF.33. segF.34. spiF.35. sslinfoF.36. tablefuncF.37. test_parserF.38. tsearch2F.39. unaccentF.40. uuid-osspF.41. vacuumloF.42. xml2G. 外部项目G.1. 客户端接口G.2. 过程语言G.3. 扩展H. The Source Code RepositoryH.1. Getting The Source Via GitI. 文档I.1. DocBookI.2. 工具集I.3. 制作文档I.4. 文档写作I.5. 风格指导J. 首字母缩略词参考书目BookindexIndex
文字

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或更高版本。

上一篇:下一篇: