Skip to content
← Catalog atlas / pg_stats

SYSTEM VIEW · System view

pg_stats

The view pg_stats provides access to the information stored in the pg_statistic catalog. This view allows access only to rows of pg_statistic that correspond to tables the user has permission to read, and therefore it is safe to allow public read access to this view. pg_stats is also designed to present the information in a more readable format than the underlying catalog — at the cost that its schema must be extended whenever new slot types are defined for pg_statistic.

First seen PG 9.0Last seen PG 19Columns 17

Checked column by column against a PostgreSQL 18.6 instance · Raw measurement record ↗

Columns PostgreSQL 18

pg_stats
COLUMNTYPEDESCRIPTION
schemaname name Name of schema containing tableReferences:pg_namespace.nspname
tablename name Name of tableReferences:pg_class.relname
attname name Name of column described by this rowReferences:pg_attribute.attname
inherited booleanDocumented as:bool If true, this row includes values from child tables, not just the values in the specified table
null_frac realDocumented as:float4 Fraction of column entries that are null
avg_width integerDocumented as:int4 Average width in bytes of column's entries
n_distinct realDocumented as:float4 If greater than zero, the estimated number of distinct values in the column. If less than zero, the negative of the number of distinct values divided by the number of rows. (The negated form is used when ANALYZE believes that the number of distinct values is likely to increase as the table grows; the positive form is used when the column seems to have a fixed number of possible values.) For example, -1 indicates a unique column in which the number of distinct values is the same as the number of rows.
most_common_vals anyarray A list of the most common values in the column. (Null if no values seem to be more common than any others.)
most_common_freqs real[]Documented as:float4[] A list of the frequencies of the most common values, i.e., number of occurrences of each divided by total number of rows. (Null when most_common_vals is.)
histogram_bounds anyarray A list of values that divide the column's values into groups of approximately equal population. The values in most_common_vals, if present, are omitted from this histogram calculation. (This column is null if the column data type does not have a < operator or if the most_common_vals list accounts for the entire population.)
correlation realDocumented as:float4 Statistical correlation between physical row ordering and logical ordering of the column values. This ranges from -1 to +1. When the value is near -1 or +1, an index scan on the column will be estimated to be cheaper than when it is near zero, due to reduction of random access to the disk. (This column is null if the column data type does not have a < operator.)
most_common_elems anyarray A list of non-null element values most often appearing within values of the column. (Null for scalar types.)
most_common_elem_freqs real[]Documented as:float4[] A list of the frequencies of the most common element values, i.e., the fraction of rows containing at least one instance of the given value. Two or three additional values follow the per-element frequencies; these are the minimum and maximum of the preceding per-element frequencies, and optionally the frequency of null elements. (Null when most_common_elems is.)
elem_count_histogram real[]Documented as:float4[] A histogram of the counts of distinct non-null element values within the values of the column, followed by the average number of distinct non-null elements. (Null for scalar types.)
range_length_histogram anyarray A histogram of the lengths of non-empty and non-null range values of a range type column. (Null for non-range types.) This histogram is calculated using the subtype_diff range function regardless of whether range bounds are inclusive.
range_empty_frac realDocumented as:float4 Fraction of column entries whose values are empty ranges. (Null for non-range types.)
range_bounds_histogram anyarray A histogram of lower and upper bounds of non-empty and non-null range values. (Null for non-range types.) These two histograms are represented as a single array of ranges, whose lower bounds represent the histogram of lower bounds, and upper bounds represent the histogram of upper bounds.

Columns marked "implicit" are not included in SELECT *; some early statistics views are completed from same-version source, and the extra provenance is shown in the column description.

Column evolution matrix

Hover a cell for the column type
PresentAdded / type or attribute changeRemoved
COLUMN9.09.19.29.39.49.59.610111213141516171819
schemaname
tablename
attname
inherited
null_frac
avg_width
n_distinct
most_common_vals
most_common_freqs
histogram_bounds
correlation
most_common_elems
most_common_elem_freqs
elem_count_histogram
range_length_histogram
range_empty_frac
range_bounds_histogram
tableid
attnum

9.0 is the coverage baseline; a column already present in the baseline is not marked as added. The matrix aligns columns by name, so a rename appears as the old column removed and a new column added.

Evolution timeline

Changes between adjacent majors

PostgreSQL 19 ← 18

+ tableid+ attnum

PostgreSQL 17 ← 16

+ range_length_histogram+ range_empty_frac+ range_bounds_histogram

PostgreSQL 15 ← 14

1 column description updates

PostgreSQL 14 ← 13

1 column description updates

PostgreSQL 9.2 ← 9.1

+ most_common_elems+ most_common_elem_freqs+ elem_count_histogram2 column description updates

Compare any two versions

Pick two versions to see added, removed, and retyped columns. The interactive comparison needs JavaScript; the evolution timeline reads fine without it.