pg.ddx.io  pgsql-committers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Michael Paquier <michael@paquier.xyz>
To: pgsql-committers@lists.postgresql.org
Subject: pgsql: Fix pg_restore_extended_stats() with expressions
Date: Wed, 28 Jan 2026 03:00:33 +0000
Message-ID: <E1vkvnE-003544-2b@gemulon.postgresql.org> (raw)

Fix pg_restore_extended_stats() with expressions

This commit fixes an issue with the restore of ndistinct and
dependencies statistics, causing the operation to fail when any of these
kinds included expressions.

In extended statistics, expressions use strictly negative attribute
numbers, decremented from -1.  For example, let's imagine an object
defined as follows:
CREATE STATISTICS stats_obj (dependencies) ON lower(name), upper(name)
  FROM tab_obj;

This object would generate dependencies stats using -1 and -2 as
attribute numbers, like that:
[{"attributes": [-1], "dependency": -2, "degree": 1.000000},
 {"attributes": [-2], "dependency": -1, "degree": 1.000000}]

However, pg_restore_extended_stats() forgot to account for the number of
expressions defined in an extended statistics object.  This would cause
the validation step of ndistinct and dependencies data to fail,
preventing a restore of their stats even if the input is valid.

This issue has come up due to an incorrect split of the patch set.  Some
tests are included to cover this behavior.

Author: Corey Huinker <corey.huinker@gmail.com>
Co-authored-by: Michael Paquier <michael@paquier.xyz>
Discussion: https://postgr.es/m/aXl4bMfSTQUxM_yy@paquier.xyz

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/e3094679b9835fed2ea5c7d7877e8ac8e7554d33

Modified Files
--------------
src/backend/statistics/extended_stats_funcs.c | 39 ++++++++++++-
src/test/regress/expected/stats_import.out    | 83 +++++++++++++++++++++++++++
src/test/regress/sql/stats_import.sql         | 58 +++++++++++++++++++
3 files changed, 179 insertions(+), 1 deletion(-)



Message-ID: <E1vkvnE-003544-2b@gemulon.postgresql.org>
Permalink:  ../E1vkvnE-003544-2b@gemulon.postgresql.org/
Also on:    postgresql.org/message-id/E1vkvnE-003544-2b@gemulon.postgresql.org

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-committers@postgresql.org
  Cc: michael@paquier.xyz, pgsql-committers@lists.postgresql.org
  Subject: Re: pgsql: Fix pg_restore_extended_stats() with expressions
  In-Reply-To: <E1vkvnE-003544-2b@gemulon.postgresql.org>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox