From 269b532aef55a579ae02a3e8e8df14101570dfd9 Mon Sep 17 00:00:00 2001
From: Tomas Vondra
Date: Sun, 16 Jan 2022 13:37:56 +0100
Subject: Add stxdinherit flag to pg_statistic_ext_data
Add pg_statistic_ext_data.stxdinherit flag, so that for each extended
statistics definition we can store two versions of data - one for the
relation alone, one for the whole inheritance tree. This is analogous to
pg_statistic.stainherit, but we failed to include such flag in catalogs
for extended statistics, and we had to work around it (see commits
859b3003de, 36c4bc6e72 and 20b9fa308e).
This changes the relationship between the two catalogs storing extended
statistics objects (pg_statistic_ext and pg_statistic_ext_data). Until
now, there was a simple 1:1 mapping - for each definition there was one
pg_statistic_ext_data row, and this row was inserted while creating the
statistics (and then updated during ANALYZE). With the stxdinherit flag,
we don't know how many rows there will be (child relations may be added
after the statistics object is defined), so there may be up to two rows.
We could make CREATE STATISTICS to always create both rows, but that
seems wasteful - without partitioning we only need stxdinherit=false
rows, and declaratively partitioned tables need only stxdinherit=true.
So we no longer initialize pg_statistic_ext_data in CREATE STATISTICS,
and instead make that a responsibility of ANALYZE. Which is what we do
for regular statistics too.
Patch by me, with extensive improvements and fixes by Justin Pryzby.
Author: Tomas Vondra, Justin Pryzby
Reviewed-by: Tomas Vondra, Justin Pryzby
Discussion: https://postgr.es/m/20210923212624.GI831%40telsasoft.com
---
doc/src/sgml/catalogs.sgml | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
(limited to 'doc/src')
diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml
index 03e2537b07d..2aeb2ef346e 100644
--- a/doc/src/sgml/catalogs.sgml
+++ b/doc/src/sgml/catalogs.sgml
@@ -7521,6 +7521,19 @@ SCRAM-SHA-256$<iteration count>:&l
created with CREATE STATISTICS.
+
+ Normally there is one entry, with stxdinherit =
+ false, for each statistics object that has been analyzed.
+ If the table has inheritance children, a second entry with
+ stxdinherit = true is also created.
+ This row represents the statistics object over the inheritance tree, i.e.,
+ statistics for the data you'd see with
+ SELECT * FROM table*,
+ whereas the stxdinherit = false row
+ represents the results of
+ SELECT * FROM ONLY table.
+
+
Like pg_statistic,
pg_statistic_ext_data should not be
@@ -7560,6 +7573,16 @@ SCRAM-SHA-256$<iteration count>:&l
+
+
+ stxdinheritbool
+
+
+ If true, the stats include inheritance child columns, not just the
+ values in the specified relation
+
+
+
stxdndistinctpg_ndistinct
--
cgit v1.2.3