目录 搜索
前言 何为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
文字

27.2. 统计收集器

PostgreSQL统计收集器是一个支持收集和汇报服务器活跃性信息的子系统。 目前,这个收集器可以给出对表和索引的访问计数,包括磁盘块的数量和独立行的项。 它还跟踪每个表中的行的总数,每个表的过去的真空和分析时间。它也可以计算用户定义的函数的调用,和在每个人的总花费的时间。

PostgreSQL还可以判断当前其它服务器进程正在执行的命令是什么。 这是一个收集过程中的独立设施。

27.2.1. 统计收集器配置

因为统计收集给查询处理增加了一些开销,所以你可以启用或禁用统计收集。这是由配置参数控制的, 通常在postgresql.conf里设置(参阅Chapter 18获取有关设置配置参数的细节)。

这个参数track_counts控制关于表和索引是否被统计。

参数track_functions实现了对用户子弟年故意函数用法的追踪。

参数track_activities控制是否监视每个服务器进程当前执行的命令字符串。

通常这些参数在postgresql.conf中设置,因此它们作用于所有服务器进程, 但是我们也可以在独立的会话里用SET命令把它们打开或者关闭。 为避免普通用户把它们的活跃性隐藏不给管理员看, 只有超级用户允许用SET命令修改这些参数。

统计收集器与后端通信通过临时文件获得需要的信息(包括autovacuum)。 这些文件存放在pg_stat_tmp子目录中。 当postmaster关闭时,一个统计数据的永久副本存放在global 子目录中。为了提高性能,stats_temp_directory参数 可以指向一个依据RAM的文件系统,降低物理I/O需求。

27.2.2. 查看收集到的统计信息

有一些预定义的视图可以用于显示统计收集的结果,在表Table 27-1里列出。另外,我们可以使用底层的统计函数制作自定义的视图。

在使用统计观察当前活跃性的时候,你必须意识到这些信息并不是实时更新的。 每个独立的服务器进程只是在准备进入空闲状态的时候才向收集器传送新的块和行访问计数; 因此正在处理的查询或者事务并不影响显示出来的总数。同样,收集器本身也最 多每PGSTAT_STAT_INTERVAL毫秒(缺省500,除非在编译服务器的时候修改过)发送一 次新的报告。因此显示总是落后于实际活动。但是由track_activities收集的当前查 询信息总是实时更新的。

另外一个需要着重指出的是,在请求服务器进程显示任何这些统计信息的时候, 它首先抓取收集器进程发出的最新报告,然后就拿这些数据作为所有统计视图 和函数的快照,直到它当前的事务结束。因此统计信息在当前事务的持续期间内不会改 变。类似的,每个进程的当前查询信息在该查询首次出现在事务中的时候就被收集了, 并且在整个事务过程中都显示相同的信息。这是一个特性,而不是一个臭虫,因为这样 就允许你在统计上执行几个查询并且对结果进行相关性检查而又不用担心这些数字会悄悄 的变化。但是如果你想看每个查询的最新结果,那么就要记住在事务块外面处理这些查询。 另外,你可以调用pg_stat_clear_snapshot,这将丢弃 目前交易的统计数据快照(如有)。下次使用 统计信息将导致获取一个新的快照

Table 27-1. 标准统计视图

视图名字 描述
pg_stat_activity 每个服务器进程一行,显示:数据库OID、数据库名、进程ID、用户OID、用户名、客户的地址和端口号,服务器进程, 当前交易、当前查询等待状态、当前查询开始执行的时间、进程启动的时间、进程的等待状态和文字当前查询。。报告当前查询相关信息的各个字段只有在打开track_activities参数 的时候才可用。另外,这些列是唯一可见的,如果检查视图的用户是一个超级用户或、拥有相同进程的用户。
只有一行,通过后台写进程来显示集群范围内的统计数据: 预计检查点的数量,要求的检查点,检查点写入的缓冲区和清理扫描, 以及后台写进程停滞一个清理扫描的时间(因为需要写很多缓冲区)。 同时还包括共享缓冲池的统计数据,包括后台进程写入的缓冲区( 也就是说,不是通过后台写进程)以及分配的总缓冲区。  
pg_stat_database 每个数据库一行, 显示:数据库OID、数据库名、与该数据库连接的活跃服务器进程数、 已提交的事务总数、已回滚的事务总、已读取的磁盘块总数、缓冲区命中总数 (在缓冲区中找到所需要的块,从而避免读取块的动作)。返回插入,抓取,更新,删除的列数。
pg_stat_all_tables 当前数据库中每个表一行(包括TOAST表),显示:表OID、模式名、表名、发起的 顺序扫描总数、顺序扫描抓取的活数据行(liverow)的数目、发起的索引扫描的总数 (属于该表的所有索引)、索引扫描抓取的活数据行的数目、插入的行总数、更新的行总数 、删除的行总数、数行更新,它们是热(即,没有单独的索引更新), 活的和死行数,上次手动清理该表的时间、上次由autovacuum自动清理该表的时间、 上次手动分析该表的时间、上次由autovacuum自动分析该表的时间。
pg_stat_sys_tables pg_stat_all_tables一样,但只显示系统表。
pg_stat_user_tables pg_stat_all_tables一样,但只显示用户表。
pg_stat_all_indexes 当前数据库的每个索引一行,显示:表OID、索引OID、模式名、表名、索引名、 使用了该索引的索引扫描总数、索引扫描返回的索引记录数、使用该索引的简 单索引扫描抓取的活表(livetable)中数据行数。
pg_stat_sys_indexes pg_stat_all_indexes一样,但只显示系统表上的索引。
pg_stat_user_indexes pg_stat_all_indexes一样,但只显示用户表上的索引。
pg_statio_all_tables 当前数据库中每个表一行(包括TOAST表),显示:表OID、模式名、表名、 从该表中读取的磁盘块总数、缓冲区命中次数、该表上所有索引的磁盘块读取总数、 该表上所有索引的缓冲区命中总数、在该表的辅助TOAST表(如果存在)上的磁盘块读取总数、 在该表的辅助TOAST表(如果存在)上的缓冲区命中总数、TOAST表的索引的磁盘块读 取总数、TOAST表的索引的缓冲区命中总数。
pg_statio_sys_tables pg_statio_all_tables一样,但只显示系统表。
pg_statio_user_tables pg_statio_all_tables一样,但只显示用户表。
pg_statio_all_indexes 当前数据库中每个索引一行,显示:表OID、索引OID、模式名、 表名、索引名、该索引的磁盘块读取总数、该索引的缓冲区命中总数。
pg_statio_sys_indexes 和pg_statio_all_indexes一样,但只显示系统表。
pg_statio_user_indexes 和pg_statio_all_indexes一样,但只显示用户表。
pg_statio_all_sequences 当前数据库中每个序列对象一行,显示:序列OID、模式名、序列名、序列的磁盘读取总数、序列的缓冲区命中总数。
pg_statio_sys_sequences pg_statio_all_sequences一样,但只系统序列。因为目前没有定义系统序列,所以这个视图总是空的。
pg_statio_user_sequences 和pg_statio_all_sequences一样,但只显示用户序列。
pg_stat_user_functions 对于所有跟踪功能,函数的OID,模式,名称,数量 通话总时间,和自我的时间。自我时间是 在函数本身所花费的时间量,总时间包括 它调用函数所花费的时间。时间值以毫秒为单位。

针对每个索引的统计对于判断哪个索引得到使用以及它们的效果非常有用

PostgreSQL8.1开始,索引既可以直接使用,也可以通过"位图扫描"使用。 在位图扫描中,多个索引的输出可以通过AND或者OR规则合并;所以,在使用索引的时候, 很难把独立的堆(表)行抓取和指定的索引抓取结合起来。因此,位图扫描增大它使用 的pg_stat_all_indexes计数。并且它还增加为表使用的 idx_tup_fetch计数,但是它并不影 响pg_stat_all_indexes. idx_tup_fetch

Note: PostgreSQL8.1之前, idx_tup_read idx_tup_fetch计数实际上 总是一样的。现在即使是不考虑位图扫描,它们也可能是不同的,因为 idx_tup_read记录从索引检索的记录条目,而 idx_tup_fetch记录从表中抓取的活行数; 如果有已经失效的或者还未提交的行通过索引扫描找出来,后者将会小一些。

Thepg_statio_系列视图在判断缓冲区效果的时候特别有用。在实际磁盘读取‘ 远比缓冲命中小的时候,这个缓冲基本满足所有读要求,因此不需要进行内核调 用。但是,这些统计并未给出所有信息。由于PostgreSQL处理磁盘的方式,不 在PostgreSQL缓冲区中的数据可能仍然驻留在内核的I/O缓存中,因此仍然可 能不必经过物理读取。对获取PostgreSQL的I/O行为的更多细节感兴趣的用户 可以结合使用PostgreSQL的统计收集器和可以分析内核I/O处理的操作系统工 具来获取更多细节。

其它查看统计的方法可以通过书写使用底层统计访问函数的查询来设置, 这些底层统计访问函数和标准视图里使用的是一样的。这些函数在Table 27-2 中列出。针对某个数据库进行访问的函数接受一个数据库OID为参数来标 识需要报告哪个数据库。每个表和每个索引的功能 表或索引的OID。函数调用统计函数采取一个函数的OID。请注意这些函数只能看到在当前数据库里的表和索引。针 对某个服务器进行访问的函数接受一个服务器进程号, 其范围从1到当前活跃服务器的数目。

Table 27-2. 统计访问函数

函数 返回类型 描述
pg_stat_get_db_numbackends(o id) integer 处理该数据库活跃的服务器进程数目
pg_stat_get_db_xact_commit(o id) bigint 数据库中已提交事务数量目
pg_stat_get_db_xact_rollback(o id) bigint 数据库中回滚的事务数量
pg_stat_get_db_blocks_fetched(o id) bigint 数据库中磁盘块抓取请求的总数
pg_stat_get_db_blocks_hit(o id) bigint 为数据库在缓冲区中找到的磁盘块抓取请求的总数
pg_stat_get_db_tuples_returned(o id) bigint 为数据库返回的Tuple数
pg_stat_get_db_tuples_fetched(o id) bigint 为数据库中获取的Tuple数
pg_stat_get_db_tuples_inserted(o id) bigint 在数据库中插入Tuple数
pg_stat_get_db_tuples_updated(o id) bigint 在数据库中更新的Tuple数
pg_stat_get_db_tuples_deleted(o id) bigint 数据库中删除Tuple数
pg_stat_get_numscans(o id) bigint 如果参数是一个表,那么就是顺序扫描读取的行数目, 如果参数是一个索引,那么就是返回的索引行的数目。
pg_stat_get_tuples_returned(o id) bigint 如果参数是一个表,那么就是顺序扫描读取的行数目,如果参数是一个索引,那么就是返回的索引行的数目。
pg_stat_get_tuples_fetched(o id) bigint 如果参数是一个表,那么就是位图扫描抓取的行数目,如果参数是一个索引,那么就是用简单索引扫描抓取的行数目。
pg_stat_get_tuples_inserted(o id) bigint 插入表中的行数量
pg_stat_get_tuples_updated(o id) bigint 在表中已更新的行数量,包括热更新
pg_stat_get_tuples_deleted(o id) bigint 从表中删除的行数量
pg_stat_get_tuples_hot_updated(o id) bigint 热更新的行数表
pg_stat_get_live_tuples(o id) bigint 活行数表
pg_stat_get_dead_tuples(o id) bigint 死行数表
pg_stat_get_blocks_fetched(o id) bigint 表或者索引的磁盘块抓取请求的数量
pg_stat_get_blocks_hit(o id) bigint 在缓冲区中找到的表或者索引的磁盘块请求数目
pg_stat_get_last_vacuum_time(o id) timestamptz 用户在该表上最后一次启动清理的时间
pg_stat_get_last_autovacuum_time(o id) timestamptz autovacuum守护进程在该表上最后一次启动清理的时间
pg_stat_get_last_analyze_time(o id) timestamptz 用户在该表上最后一次启动分析的时间
pg_stat_get_last_autoanalyze_time(o id) timestamptz autovacuum守护进程在该表上最后一次启动分析的时间
pg_backend_p id() integer 当前会话的服务器进程的进程ID
pg_stat_get_activity(integer) setofrecord 返回一个关于带有特殊PID号的后台进程的记录信息,或者是每个 活动的后台进程的记录(如果声明了NULL)。 返回结果是pg_stat_activity视图中的一个子集。
pg_stat_get_function_calls(o id) bigint 函数已被调用次数
pg_stat_get_function_time(o id) bigint 总挂钟时间花费在功能,在微秒的。包括 在这个函数调用所花费的时间。
pg_stat_get_function_self_time(o id) bigint 只有在此功能所花费的时间。在所谓的功能所花费的时间 被排除在外。
pg_stat_get_backend_ idset() setofinteger 设置当前活动的服务器进程数(从1到 活动服务器进程的数量)。看在文本中使用的例子。
pg_stat_get_backend_p id(integer) integer 给定的服务器进程的PID
pg_stat_get_backend_db id(integer) o id 给定的服务器进程的数据库ID
pg_stat_get_backend_user id(integer) o id 给定的服务器进程的用户ID
pg_stat_get_backend_activity(integer) text 给定服务器进程的当前活动查询,仅在调用者是超级用户或被查询会话的用户, 并且打开track_activities的时候才能获得结果。
pg_stat_get_backend_waiting(integer) boolean 如果给定服务器进程在等待某个锁,并且调用者是超级用户或被查询会话的用户, 并且打开track_activities的时候才返回真。
pg_stat_get_backend_activity_start(integer) timestampwithtimezone 给定服务器进程当前正在执行的查询的起始时间,仅在调用者是超级用户或被查询会话的用户, 并且打开track_activities的时候才能获得结果。
pg_stat_get_backend_xact_start(integer) timestampwithtimezone 给定的服务进程当前正在执行的事务的开始时间,但只有 当权用户是超级用户或正在被插叙的会话的相同用户(同时 ,开启track_activities)才可以使用。
pg_stat_get_backend_start(integer) timestampwithtimezone timezone给定服务器进程启动的时间,如果当前用户不是超级用户或被查询的后端的用户,则返回NULL。
pg_stat_get_backend_client_addr(integer) inet 连接到给定服务器进程的客户端IP地址。如果是通过Unix域套接字连接的则返回NULL。 如果当前用户不是超级用户或被查询会话的用户,也返回NULL。
pg_stat_get_backend_client_port(integer) integer 连接到给定服务器进程的客户端IP端口。如果是通过Unix域套接字连接的则返回-1。 如果当前用户不是超级用户或被查询会话的用户,也返回NULL。
pg_stat_get_bgwriter_timed_checkpoints() bigint 后台写进程开启定时检查点的时间(因为 checkpoint_timeout时间已经过期了)
pg_stat_get_bgwriter_requested_checkpoints() bigint 后台写进程开启基于后端请求的检查点的时间,因为已经超过了checkpoint_segments 或因为已经执行了CHECKPOINT
pg_stat_get_bgwriter_buf_written_checkpoints() bigint 在检查点期间后台写进程写入的缓冲区数目。
pg_stat_get_bgwriter_buf_written_clean() bigint 为日常清理脏块,后台写进程写入的缓冲区数目。
pg_stat_get_bgwriter_maxwritten_clean() bigint 后台写进程停止清理扫描的时间,因为 已经写入了更多的缓冲区(相比bgwriter_lru_maxpages 参数声明的缓冲区数)。
pg_stat_get_buf_written_backend() bigint 后端进程写入的缓冲区数,因为它们需要分配一个新的缓冲区。
pg_stat_get_buf_alloc() bigint 分配的总缓冲区数。
pg_stat_clear_snapshot() void 忽略当前的统计快照。
pg_stat_reset() void 为当前数据库重置统计计数器为0(需要超级用户权限)。
pg_stat_reset_shared(text) void 为当前数据库集群重置共享统计计数器为0(需要超级用户权限)。 调用pg_stat_reset_shared('bgwriter')将所有 pg_stat_bgwriter显示的值置为0。
pg_stat_reset_single_table_counters(o id) void 为当前数据库中的一个表或索引重置统计为0(需要超级用户权限)。
pg_stat_reset_single_function_counters(o id) void 为当前数据库中的一个函数重置统计为0(需要超级用户权限)。

Note: pg_stat_get_blocks_fetched减去pg_stat_get_blocks_hit就是为该表、索引、数据库而调用 内核read()函数的数目;不过实际的物理读取的数目通常比较低, 因为还有内核级的缓冲。*_blks_read用减法统计列获取减去结果

后端ID的所有功能,访问有关后端的信息索引数,除了pg_stat_get_activity,这是由PID功能。 pg_stat_get_backend_ idset函数提供了为每个活跃服务器进程生成一行的便捷方法。 比如,要显示所有服务器进程的PID和它们的当前查询:

SELECTpg_stat_get_backend_p id(s.backend id)ASprocp id,
pg_stat_get_backend_activity(s.backend id)AScurrent_query
FROM(SELECTpg_stat_get_backend_ idset()ASbackend id)ASs;

上一篇: 下一篇: