视图 pg_stats 提供对存储在 pg_statistic 表里面的信息的访问。这个视图允许我们只访问那些在 pg_statistic 里面对应用户有权限读取的表的数据行,因此我们可以安全地允许公众访问这个视图。
pg_stats 也设计成把信息以一种更易读的方式出现的形式, 它比下层的系统表更容易阅读 — 代价就是如果在 pg_statistic 里定义了新的数据槽位,那么我们必须扩展它的视图定义。
Table 42-43. pg_stats 字段
名字 | 类型 | 引用 | 描述 |
---|---|---|---|
schemaname | name | pg_namespace.nspname | 包含此表的模式名字 |
tablename | name | pg_class.relname | 表的名字 |
attname | name | pg_attribute.attname | 这一行描述的字段的名字 |
null_frac | real | 记录中字段为空的百分比 | |
avg_width | integer | 字段记录以字节记的平均宽度 | |
n_distinct | real | 如果大于零,就是在字段中独立数值的估计数目。如果小于零,就是独立数值的数目被行数除的负数。 (用负数形式是因为 ANALYZE 认为独立数值的数目是随着表增长而增长; 正数的形式用于在字段看上去好像有固定的可能值数目的情况下。)比如,-1 表示一个唯一字段,独立数值的个数和行数相同 | |
most_common_vals | anyarray | 一个字段里最常用数值的列表。(如果看上去没有啥数值比其它更常见,则为 NULL。) | |
most_common_freqs | real[] | 一个最常用数值的频率的列表,也就是说,每个出现的次数除以行数。 (如果 most_common_vals 是 NULL,则为 NULL) | |
histogram_bounds | anyarray | 一个数值的列表,它把字段的数值分成几组大致相同热门的组。如果在 most_common_vals 里有数值,则在这个饼图的计算中省略。 (如果字段数据类型没有 < 操作符或者 most_common_vals 列表代表了整个分布性,则这个字段为 NULL。) | |
correlation | real | 统计与字段值的物理行序和逻辑行序有关。它的范围从 -1 到 +1。 在数值接近 -1 或者 +1 的时候,在字段上的索引扫描将被认为比它接近零的时候开销更少,因为减少了对磁盘的随机访问。 (如果字段数据类型没有 < 操作符,那么这个字段为 NULL。) |
在 most_common_vals 和 histogram_bounds 数组里的元素的最大数目可以用 ALTER TABLE SET STATISTICS 命令一个一个字段地设置, 或者通过设置运行时环境变量default_statistics_target 全局地设置。