diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql
index 7723f01327..d0fd74075a 100644
--- a/src/backend/catalog/system_views.sql
+++ b/src/backend/catalog/system_views.sql
@@ -194,7 +194,10 @@ CREATE VIEW pg_stats WITH (security_barrier) AS
         stainherit AS inherited,
         stanullfrac AS null_frac,
         stawidth AS avg_width,
-        stadistinct AS n_distinct,
+        CASE
+            WHEN stadistinct >= 0 THEN stadistinct
+            ELSE -1 * stadistinct * pg_stat_get_live_tuples(c.oid)
+        END AS n_distinct,
         CASE
             WHEN stakind1 = 1 THEN stavalues1
             WHEN stakind2 = 1 THEN stavalues2
diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out
index e0f2c543ef..e3dba42aef 100644
--- a/src/test/regress/expected/rules.out
+++ b/src/test/regress/expected/rules.out
@@ -2142,7 +2142,10 @@ pg_stats| SELECT n.nspname AS schemaname,
     s.stainherit AS inherited,
     s.stanullfrac AS null_frac,
     s.stawidth AS avg_width,
-    s.stadistinct AS n_distinct,
+        CASE
+            WHEN (s.stadistinct >= (0)::double precision) THEN (s.stadistinct)::double precision
+            ELSE ((('-1'::integer)::double precision * s.stadistinct) * (pg_stat_get_live_tuples(c.oid))::double precision)
+        END AS n_distinct,
         CASE
             WHEN (s.stakind1 = 1) THEN s.stavalues1
             WHEN (s.stakind2 = 1) THEN s.stavalues2
