From 6e0ea807b12407d8c5136056089a8c6fef3da49c Mon Sep 17 00:00:00 2001
From: Corey Huinker <corey.huinker@gmail.com>
Date: Mon, 9 Feb 2026 09:35:48 -0500
Subject: [PATCH v9 4/5] Add range stats to pg_stats_ext_exprs.

When this view was introduced in a4d75c86bf15, the statistics
range_length_histogram, range_empty_frac, and range_bounds_histogram
were omitted. This oversight was harmless until
pg_restore_extended_stats() was introduced, which created the need to
expose range-related stats from stxdexpr.
---
 src/backend/catalog/system_views.sql | 23 ++++++++++++++++++++++-
 src/test/regress/expected/rules.out  | 26 +++++++++++++++++++++++++-
 2 files changed, 47 insertions(+), 2 deletions(-)

diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql
index 7553f31fef0..1ea8f1faa9e 100644
--- a/src/backend/catalog/system_views.sql
+++ b/src/backend/catalog/system_views.sql
@@ -363,7 +363,28 @@ CREATE VIEW pg_stats_ext_exprs WITH (security_barrier) AS
                WHEN (stat.a).stakind3 = 5 THEN (stat.a).stanumbers3
                WHEN (stat.a).stakind4 = 5 THEN (stat.a).stanumbers4
                WHEN (stat.a).stakind5 = 5 THEN (stat.a).stanumbers5
-           END) AS elem_count_histogram
+           END) AS elem_count_histogram,
+           (CASE
+               WHEN (stat.a).stakind1 = 6 THEN (stat.a).stavalues1
+               WHEN (stat.a).stakind2 = 6 THEN (stat.a).stavalues2
+               WHEN (stat.a).stakind3 = 6 THEN (stat.a).stavalues3
+               WHEN (stat.a).stakind4 = 6 THEN (stat.a).stavalues4
+               WHEN (stat.a).stakind5 = 6 THEN (stat.a).stavalues5
+           END) AS range_length_histogram,
+           (CASE
+               WHEN (stat.a).stakind1 = 6 THEN (stat.a).stanumbers1[1]
+               WHEN (stat.a).stakind2 = 6 THEN (stat.a).stanumbers2[1]
+               WHEN (stat.a).stakind3 = 6 THEN (stat.a).stanumbers3[1]
+               WHEN (stat.a).stakind4 = 6 THEN (stat.a).stanumbers4[1]
+               WHEN (stat.a).stakind5 = 6 THEN (stat.a).stanumbers5[1]
+           END) AS range_empty_frac,
+           (CASE
+               WHEN (stat.a).stakind1 = 7 THEN (stat.a).stavalues1
+               WHEN (stat.a).stakind2 = 7 THEN (stat.a).stavalues2
+               WHEN (stat.a).stakind3 = 7 THEN (stat.a).stavalues3
+               WHEN (stat.a).stakind4 = 7 THEN (stat.a).stavalues4
+               WHEN (stat.a).stakind5 = 7 THEN (stat.a).stavalues5
+               END) AS range_bounds_histogram
     FROM pg_statistic_ext s JOIN pg_class c ON (c.oid = s.stxrelid)
          LEFT JOIN pg_statistic_ext_data sd ON (s.oid = sd.stxoid)
          LEFT JOIN pg_namespace cn ON (cn.oid = c.relnamespace)
diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out
index f4ee2bd7459..f9bc213e5a1 100644
--- a/src/test/regress/expected/rules.out
+++ b/src/test/regress/expected/rules.out
@@ -2696,7 +2696,31 @@ pg_stats_ext_exprs| SELECT cn.nspname AS schemaname,
             WHEN ((stat.a).stakind4 = 5) THEN (stat.a).stanumbers4
             WHEN ((stat.a).stakind5 = 5) THEN (stat.a).stanumbers5
             ELSE NULL::real[]
-        END AS elem_count_histogram
+        END AS elem_count_histogram,
+        CASE
+            WHEN ((stat.a).stakind1 = 6) THEN (stat.a).stavalues1
+            WHEN ((stat.a).stakind2 = 6) THEN (stat.a).stavalues2
+            WHEN ((stat.a).stakind3 = 6) THEN (stat.a).stavalues3
+            WHEN ((stat.a).stakind4 = 6) THEN (stat.a).stavalues4
+            WHEN ((stat.a).stakind5 = 6) THEN (stat.a).stavalues5
+            ELSE NULL::anyarray
+        END AS range_length_histogram,
+        CASE
+            WHEN ((stat.a).stakind1 = 6) THEN (stat.a).stanumbers1[1]
+            WHEN ((stat.a).stakind2 = 6) THEN (stat.a).stanumbers2[1]
+            WHEN ((stat.a).stakind3 = 6) THEN (stat.a).stanumbers3[1]
+            WHEN ((stat.a).stakind4 = 6) THEN (stat.a).stanumbers4[1]
+            WHEN ((stat.a).stakind5 = 6) THEN (stat.a).stanumbers5[1]
+            ELSE NULL::real
+        END AS range_empty_frac,
+        CASE
+            WHEN ((stat.a).stakind1 = 7) THEN (stat.a).stavalues1
+            WHEN ((stat.a).stakind2 = 7) THEN (stat.a).stavalues2
+            WHEN ((stat.a).stakind3 = 7) THEN (stat.a).stavalues3
+            WHEN ((stat.a).stakind4 = 7) THEN (stat.a).stavalues4
+            WHEN ((stat.a).stakind5 = 7) THEN (stat.a).stavalues5
+            ELSE NULL::anyarray
+        END AS range_bounds_histogram
    FROM (((((pg_statistic_ext s
      JOIN pg_class c ON ((c.oid = s.stxrelid)))
      LEFT JOIN pg_statistic_ext_data sd ON ((s.oid = sd.stxoid)))
-- 
2.53.0

