mirror of
https://github.com/postgres/postgres.git
synced 2025-04-29 13:56:47 +03:00
Display length and bounds histograms in pg_stats
Values corresponding to STATISTIC_KIND_RANGE_LENGTH_HISTOGRAM and STATISTIC_KIND_BOUNDS_HISTOGRAM were not exposed to pg_stats when these slot kinds were introduced in 918eee0c49. This commit adds the missing fields to pg_stats. Catversion is bumped. Discussion: https://postgr.es/m/flat/b67d8b57-9357-7e82-a2e7-f6ce6eaeec67@postgrespro.ru Author: Egor Rogov, Soumyadeep Chakraborty Reviewed-by: Tomas Vondra, Justin Pryzby, Jian He
This commit is contained in:
parent
441c8a3134
commit
bc3c8db8ae
@ -3799,6 +3799,45 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx
|
||||
non-null elements. (Null for scalar types.)
|
||||
</para></entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry role="catalog_table_entry"><para role="column_definition">
|
||||
<structfield>range_length_histogram</structfield> <type>anyarray</type>
|
||||
</para>
|
||||
<para>
|
||||
A histogram of the lengths of non-empty and non-null range values of a
|
||||
range type column. (Null for non-range types.)
|
||||
</para>
|
||||
<para>
|
||||
This histogram is calculated using the <literal>subtype_diff</literal>
|
||||
range function regardless of whether range bounds are inclusive.
|
||||
</para></entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry role="catalog_table_entry"><para role="column_definition">
|
||||
<structfield>range_empty_frac</structfield> <type>float4</type>
|
||||
</para>
|
||||
<para>
|
||||
Fraction of column entries whose values are empty ranges.
|
||||
(Null for non-range types.)
|
||||
</para></entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry role="catalog_table_entry"><para role="column_definition">
|
||||
<structfield>range_bounds_histogram</structfield> <type>anyarray</type>
|
||||
</para>
|
||||
<para>
|
||||
A histogram of lower and upper bounds of non-empty and non-null range
|
||||
values. (Null for non-range types.)
|
||||
</para>
|
||||
<para>
|
||||
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.
|
||||
</para></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
@ -243,7 +243,28 @@ CREATE VIEW pg_stats WITH (security_barrier) AS
|
||||
WHEN stakind3 = 5 THEN stanumbers3
|
||||
WHEN stakind4 = 5 THEN stanumbers4
|
||||
WHEN stakind5 = 5 THEN stanumbers5
|
||||
END AS elem_count_histogram
|
||||
END AS elem_count_histogram,
|
||||
CASE
|
||||
WHEN stakind1 = 6 THEN stavalues1
|
||||
WHEN stakind2 = 6 THEN stavalues2
|
||||
WHEN stakind3 = 6 THEN stavalues3
|
||||
WHEN stakind4 = 6 THEN stavalues4
|
||||
WHEN stakind5 = 6 THEN stavalues5
|
||||
END AS range_length_histogram,
|
||||
CASE
|
||||
WHEN stakind1 = 6 THEN stanumbers1[1]
|
||||
WHEN stakind2 = 6 THEN stanumbers2[1]
|
||||
WHEN stakind3 = 6 THEN stanumbers3[1]
|
||||
WHEN stakind4 = 6 THEN stanumbers4[1]
|
||||
WHEN stakind5 = 6 THEN stanumbers5[1]
|
||||
END AS range_empty_frac,
|
||||
CASE
|
||||
WHEN stakind1 = 7 THEN stavalues1
|
||||
WHEN stakind2 = 7 THEN stavalues2
|
||||
WHEN stakind3 = 7 THEN stavalues3
|
||||
WHEN stakind4 = 7 THEN stavalues4
|
||||
WHEN stakind5 = 7 THEN stavalues5
|
||||
END AS range_bounds_histogram
|
||||
FROM pg_statistic s JOIN pg_class c ON (c.oid = s.starelid)
|
||||
JOIN pg_attribute a ON (c.oid = attrelid AND attnum = s.staattnum)
|
||||
LEFT JOIN pg_namespace n ON (n.oid = c.relnamespace)
|
||||
|
@ -57,6 +57,6 @@
|
||||
*/
|
||||
|
||||
/* yyyymmddN */
|
||||
#define CATALOG_VERSION_NO 202311142
|
||||
#define CATALOG_VERSION_NO 202311271
|
||||
|
||||
#endif
|
||||
|
@ -2466,7 +2466,31 @@ pg_stats| SELECT n.nspname AS schemaname,
|
||||
WHEN (s.stakind4 = 5) THEN s.stanumbers4
|
||||
WHEN (s.stakind5 = 5) THEN s.stanumbers5
|
||||
ELSE NULL::real[]
|
||||
END AS elem_count_histogram
|
||||
END AS elem_count_histogram,
|
||||
CASE
|
||||
WHEN (s.stakind1 = 6) THEN s.stavalues1
|
||||
WHEN (s.stakind2 = 6) THEN s.stavalues2
|
||||
WHEN (s.stakind3 = 6) THEN s.stavalues3
|
||||
WHEN (s.stakind4 = 6) THEN s.stavalues4
|
||||
WHEN (s.stakind5 = 6) THEN s.stavalues5
|
||||
ELSE NULL::anyarray
|
||||
END AS range_length_histogram,
|
||||
CASE
|
||||
WHEN (s.stakind1 = 6) THEN s.stanumbers1[1]
|
||||
WHEN (s.stakind2 = 6) THEN s.stanumbers2[1]
|
||||
WHEN (s.stakind3 = 6) THEN s.stanumbers3[1]
|
||||
WHEN (s.stakind4 = 6) THEN s.stanumbers4[1]
|
||||
WHEN (s.stakind5 = 6) THEN s.stanumbers5[1]
|
||||
ELSE NULL::real
|
||||
END AS range_empty_frac,
|
||||
CASE
|
||||
WHEN (s.stakind1 = 7) THEN s.stavalues1
|
||||
WHEN (s.stakind2 = 7) THEN s.stavalues2
|
||||
WHEN (s.stakind3 = 7) THEN s.stavalues3
|
||||
WHEN (s.stakind4 = 7) THEN s.stavalues4
|
||||
WHEN (s.stakind5 = 7) THEN s.stavalues5
|
||||
ELSE NULL::anyarray
|
||||
END AS range_bounds_histogram
|
||||
FROM (((pg_statistic s
|
||||
JOIN pg_class c ON ((c.oid = s.starelid)))
|
||||
JOIN pg_attribute a ON (((c.oid = a.attrelid) AND (a.attnum = s.staattnum))))
|
||||
|
Loading…
x
Reference in New Issue
Block a user