2024 年 9 月 26 日: PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不支持的版本: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

51.51. 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_statspg_statistic 上的公开可读视图,它仅公开有关当前用户可读的那些表的的信息。

表 51.51. pg_statistic

列 类型

描述

starelid oid(引用 pg_class.oid

所描述列所属的表或索引

staattnum int2(引用 pg_attribute.attnum

所描述列的编号

stainherit bool

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

stanullfrac float4

该列条目中为空的比例

stawidth int4

非空条目的平均存储宽度(以字节为单位)

stadistinct float4

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

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 更具体地定义这些列的类型。


提交更正

如果您在文档中发现任何不正确的内容,与您对特定功能的体验不符,或者需要进一步说明,请使用 此表格 报告文档问题。