↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2
历史版本。 PostgreSQL 13 已结束支持。 2025-11-13. 请参阅 当前版本手册.

51.49. pg_statistic #

目录 pg_statistic 存储有关数据库内容的统计数据。其中的项由 ANALYZE 创建,查询规划器会使用这些数据来进行查询规划。注意所有的统计数据天然就是近似的,即使这些数据是最新的。

通常,每个已分析的表列都有一个条目,其中 stainherit = false。如果表具有继承子表,则还会创建第二个条目,其中 stainherit = true。此行表示继承树上列的统计信息,即你可以通过 SELECT column FROM table* 看到的数据的统计信息,而 stainherit = false 行表示 SELECT column FROM ONLY table 的结果。

pg_statistic 也存储关于索引表达式值的统计数据,就好像它们是真正的数据列,但在这种情况中 starelid 指索引。对一个普通非表达式索引列不会创建项,因为它将是底层表列的项的冗余。当前,索引表达式的项都具有 stainherit = false。

由于不同种类的数据可能适合不同种类的统计信息,pg_statistic 在设计上尽量不对所存储的统计信息种类作出假定。只有极为通用的统计信息(例如空值情况)才在 pg_statistic 中有专用的列。其余统计信息都存储在“槽位”中。每个槽位都是一组相关的列,其内容由其中一列的代码编号来标识。更多信息见 src/include/catalog/pg_statistic.h。

pg_statistic 不应公开可读,因为即使是表内容的统计信息也可能被认为是敏感的(例如,一个工资列的最大值和最小值就可能非常引人关注)。pg_stats 是建立在 pg_statistic 之上的公开可读视图,它只会显示当前用户可读取的表的信息。

表 51.49. pg_statistic 列

列类型

描述

starelid oid(引用 pg_class.oid)

被描述列所属的表或索引

staattnum int2(引用 pg_attribute.attnum)

被描述列的编号

stainherit bool

如果为真,则统计信息包括子表中的值,而不仅仅是指定关系中的值

stanullfrac float4

列中空值所占的比例

stawidth int4

非空项的平均存储宽度,以字节计

stadistinct float4

列中不同非空数据值的数量。一个大于零的值是不同值的真正数目。一个小于零的值是表中行数的乘数的负值;例如,对于一个约 80% 的值为非空且每个非空值平均出现两次的列,可以表示为 stadistinct = -0.4。一个 0 值表示不同值的数目未知。

stakindN int2

一个代码,它表示存储在该 pg_statistic 行中第 N 个“槽位”的统计类型。

staopN oid(引用 pg_operator.oid)

一个用于生成这些存储在第 N 个“槽位”的统计信息的操作符。例如,直方图槽位会使用<操作符,该操作符定义了这些数据的排序顺序。

stacollN oid(引用 pg_collation.oid)

用于生成存储在第 N 个“槽位”中的统计信息的排序规则。例如,支持排序规则的列的直方图槽会显示定义数据排序顺序的排序规则。对于不支持排序规则的数据,则为零。

stanumbersN float4[]

第 N 个“槽位”中相应种类的数值统计信息;如果该槽位种类不涉及数值,则为 NULL

stavaluesN anyarray

第 N 个“槽位”所需的相应种类的列数据值,如果该槽位类型不存储任何数据值则为 NULL。每个数组的元素值实际上都是指定列的数据类型或者是一个相关类型(如数组元素类型),因此,无法把这些列的类型定义得比 anyarray 更具体。


报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.