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之上的公开可读视图,它只会显示当前用户可读取的表的信息。
英文手册覆盖始于 PostgreSQL 7.4. 来源历史与运行验证各自保留独立版本边界。
当前阅读 PG 18·选择有来源记录的版本
- kind
- catalog
- lang
- en
- measured attributes
- true
- metadata release
- 18.6
- runtime verified
- false
- source
- english-manual
版本定义 PG 18
目录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之上的公开可读视图,它只会显示当前用户可读取的表的信息。
目录列
| 列 | 类型 | 可空性 | 描述 |
|---|---|---|---|
| starelid | oid | 非空 | 被描述列所属的表或索引 |
| staattnum | int2 | 非空 | 被描述列的编号 |
| stainherit | bool | 非空 | 如果为真,则统计信息包括子表中的值,而不仅仅是指定关系中的值 |
| stanullfrac | float4 | 非空 | 列中空值所占的比例 |
| stawidth | int4 | 非空 | 非空项的平均存储宽度,以字节计 |
| stadistinct | float4 | 非空 | 列中不同非空数据值的数量。一个大于零的值是不同值的真正数目。一个小于零的值是表中行数的乘数的负值;例如,对于一个约 80% 的值为非空且每个非空值平均出现两次的列,可以表示为stadistinct = -0.4。一个0值表示不同值的数目未知。 |
| stakind1 | int2 | 非空 | 一个代码,它表示存储在该pg_statistic行中第N个“槽位”的统计类型。 |
| stakind2 | int2 | 非空 | 一个代码,它表示存储在该pg_statistic行中第N个“槽位”的统计类型。 |
| stakind3 | int2 | 非空 | 一个代码,它表示存储在该pg_statistic行中第N个“槽位”的统计类型。 |
| stakind4 | int2 | 非空 | 一个代码,它表示存储在该pg_statistic行中第N个“槽位”的统计类型。 |
| stakind5 | int2 | 非空 | 一个代码,它表示存储在该pg_statistic行中第N个“槽位”的统计类型。 |
| staop1 | oid | 非空 | 一个用于生成这些存储在第N个“槽位”的统计信息的操作符。例如,直方图槽位会使用<操作符,该操作符定义了这些数据的排序顺序。如果统计类型不需要操作符则为零。 |
| staop2 | oid | 非空 | 一个用于生成这些存储在第N个“槽位”的统计信息的操作符。例如,直方图槽位会使用<操作符,该操作符定义了这些数据的排序顺序。如果统计类型不需要操作符则为零。 |
| staop3 | oid | 非空 | 一个用于生成这些存储在第N个“槽位”的统计信息的操作符。例如,直方图槽位会使用<操作符,该操作符定义了这些数据的排序顺序。如果统计类型不需要操作符则为零。 |
| staop4 | oid | 非空 | 一个用于生成这些存储在第N个“槽位”的统计信息的操作符。例如,直方图槽位会使用<操作符,该操作符定义了这些数据的排序顺序。如果统计类型不需要操作符则为零。 |
| staop5 | oid | 非空 | 一个用于生成这些存储在第N个“槽位”的统计信息的操作符。例如,直方图槽位会使用<操作符,该操作符定义了这些数据的排序顺序。如果统计类型不需要操作符则为零。 |
| stacoll1 | oid | 非空 | 用于生成存储在第N个“槽位”中的统计信息的排序规则。例如,支持排序规则的列的直方图槽会显示定义数据排序顺序的排序规则。对于不支持排序规则的数据,则为零。 |
| stacoll2 | oid | 非空 | 用于生成存储在第N个“槽位”中的统计信息的排序规则。例如,支持排序规则的列的直方图槽会显示定义数据排序顺序的排序规则。对于不支持排序规则的数据,则为零。 |
| stacoll3 | oid | 非空 | 用于生成存储在第N个“槽位”中的统计信息的排序规则。例如,支持排序规则的列的直方图槽会显示定义数据排序顺序的排序规则。对于不支持排序规则的数据,则为零。 |
| stacoll4 | oid | 非空 | 用于生成存储在第N个“槽位”中的统计信息的排序规则。例如,支持排序规则的列的直方图槽会显示定义数据排序顺序的排序规则。对于不支持排序规则的数据,则为零。 |
| stacoll5 | oid | 非空 | 用于生成存储在第N个“槽位”中的统计信息的排序规则。例如,支持排序规则的列的直方图槽会显示定义数据排序顺序的排序规则。对于不支持排序规则的数据,则为零。 |
| stanumbers1 | float4[] | 可空 | 第N个“槽位”中相应种类的数值统计信息;如果该槽位种类不涉及数值,则为 NULL |
| stanumbers2 | float4[] | 可空 | 第N个“槽位”中相应种类的数值统计信息;如果该槽位种类不涉及数值,则为 NULL |
| stanumbers3 | float4[] | 可空 | 第N个“槽位”中相应种类的数值统计信息;如果该槽位种类不涉及数值,则为 NULL |
| stanumbers4 | float4[] | 可空 | 第N个“槽位”中相应种类的数值统计信息;如果该槽位种类不涉及数值,则为 NULL |
| stanumbers5 | float4[] | 可空 | 第N个“槽位”中相应种类的数值统计信息;如果该槽位种类不涉及数值,则为 NULL |
| stavalues1 | anyarray | 可空 | 第N个“槽位”所需的相应种类的列数据值,如果该槽位类型不存储任何数据值则为 NULL。每个数组的元素值实际上都是指定列的数据类型或者是一个相关类型(如数组元素类型),因此,无法把这些列的类型定义得比anyarray更具体。 |
| stavalues2 | anyarray | 可空 | 第N个“槽位”所需的相应种类的列数据值,如果该槽位类型不存储任何数据值则为 NULL。每个数组的元素值实际上都是指定列的数据类型或者是一个相关类型(如数组元素类型),因此,无法把这些列的类型定义得比anyarray更具体。 |
| stavalues3 | anyarray | 可空 | 第N个“槽位”所需的相应种类的列数据值,如果该槽位类型不存储任何数据值则为 NULL。每个数组的元素值实际上都是指定列的数据类型或者是一个相关类型(如数组元素类型),因此,无法把这些列的类型定义得比anyarray更具体。 |
| stavalues4 | anyarray | 可空 | 第N个“槽位”所需的相应种类的列数据值,如果该槽位类型不存储任何数据值则为 NULL。每个数组的元素值实际上都是指定列的数据类型或者是一个相关类型(如数组元素类型),因此,无法把这些列的类型定义得比anyarray更具体。 |
| stavalues5 | anyarray | 可空 | 第N个“槽位”所需的相应种类的列数据值,如果该槽位类型不存储任何数据值则为 NULL。每个数组的元素值实际上都是指定列的数据类型或者是一个相关类型(如数组元素类型),因此,无法把这些列的类型定义得比anyarray更具体。 |
比较版本
完整来源事实
runtime columns
starelid, staattnum, stainherit, stanullfrac, stawidth, stadistinct, stakind1, stakind2, stakind3, stakind4, stakind5, staop1, staop2, staop3, staop4, staop5, stacoll1, stacoll2, stacoll3, stacoll4, stacoll5, stanumbers1, stanumbers2, stanumbers3, stanumbers4, stanumbers5, stavalues1, stavalues2, stavalues3, stavalues4, stavalues5
来源引用
定义来源
center · PostgreSQL 18 · english-manuals:45dabd136acaefdef44754fd15fbcc7eb0788aebed49d02d676f5585f7636398
正文语言: zh-Hans · 2026-09-27@419045e