v4-0001-CREATE-STATISTICS-improve-misleading-error-messag.patch

text/plain

Filename: v4-0001-CREATE-STATISTICS-improve-misleading-error-messag.patch
Type: text/plain
Part: 0
Message: Re: misleading error message in ProcessUtilitySlow T_CreateStatsStmt

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: format-patch
Series: patch v4-0001
Subject: CREATE STATISTICS: improve misleading error message
File+
src/backend/tcop/utility.c 2 3
src/test/regress/expected/stats_ext.out 7 14
From 7c55d765dc1ec2f8a28e8ae1fe3551d32ed5a964 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter@eisentraut.org>
Date: Fri, 12 Sep 2025 15:30:16 +0200
Subject: [PATCH v4] CREATE STATISTICS: improve misleading error message

The previous change (commit f225473cbae) was still not on target,
because it talked about relation kinds, which are not what is being
checked here.  Provide a more accurate message.

Discussion: https://postgr.es/m/CACJufxEZ48toGH0Em_6vdsT57Y3L8pLF=DZCQ_gCii6=C3MeXw@mail.gmail.com
---
 src/backend/tcop/utility.c              |  5 ++---
 src/test/regress/expected/stats_ext.out | 21 +++++++--------------
 2 files changed, 9 insertions(+), 17 deletions(-)

diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index 5f442bc3bd4..68605656b31 100644
--- a/src/backend/tcop/utility.c
+++ b/src/backend/tcop/utility.c
@@ -1873,9 +1873,8 @@ ProcessUtilitySlow(ParseState *pstate,
 
 					if (!IsA(rel, RangeVar))
 						ereport(ERROR,
-								(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-								 errmsg("cannot create statistics on the specified relation"),
-								 errdetail("CREATE STATISTICS only supports tables, foreign tables and materialized views.")));
+								(errcode(ERRCODE_SYNTAX_ERROR),
+								 errmsg("CREATE STATISTICS only supports relation names in the FROM clause")));
 
 					/*
 					 * CREATE STATISTICS will influence future execution plans
diff --git a/src/test/regress/expected/stats_ext.out b/src/test/regress/expected/stats_ext.out
index a1f83b58b23..fdc0aa130bd 100644
--- a/src/test/regress/expected/stats_ext.out
+++ b/src/test/regress/expected/stats_ext.out
@@ -56,29 +56,22 @@ CREATE STATISTICS tst (unrecognized) ON x, y FROM ext_stats_test;
 ERROR:  unrecognized statistics kind "unrecognized"
 -- unsupported targets
 CREATE STATISTICS tst ON a FROM (VALUES (x)) AS foo;
-ERROR:  cannot create statistics on the specified relation
-DETAIL:  CREATE STATISTICS only supports tables, foreign tables and materialized views.
+ERROR:  CREATE STATISTICS only supports relation names in the FROM clause
 CREATE STATISTICS tst ON a FROM foo NATURAL JOIN bar;
-ERROR:  cannot create statistics on the specified relation
-DETAIL:  CREATE STATISTICS only supports tables, foreign tables and materialized views.
+ERROR:  CREATE STATISTICS only supports relation names in the FROM clause
 CREATE STATISTICS tst ON a FROM (SELECT * FROM ext_stats_test) AS foo;
-ERROR:  cannot create statistics on the specified relation
-DETAIL:  CREATE STATISTICS only supports tables, foreign tables and materialized views.
+ERROR:  CREATE STATISTICS only supports relation names in the FROM clause
 CREATE STATISTICS tst ON a FROM ext_stats_test s TABLESAMPLE system (x);
-ERROR:  cannot create statistics on the specified relation
-DETAIL:  CREATE STATISTICS only supports tables, foreign tables and materialized views.
+ERROR:  CREATE STATISTICS only supports relation names in the FROM clause
 CREATE STATISTICS tst ON a FROM XMLTABLE('foo' PASSING 'bar' COLUMNS a text);
-ERROR:  cannot create statistics on the specified relation
-DETAIL:  CREATE STATISTICS only supports tables, foreign tables and materialized views.
+ERROR:  CREATE STATISTICS only supports relation names in the FROM clause
 CREATE STATISTICS tst ON a FROM JSON_TABLE(jsonb '123', '$' COLUMNS (item int));
-ERROR:  cannot create statistics on the specified relation
-DETAIL:  CREATE STATISTICS only supports tables, foreign tables and materialized views.
+ERROR:  CREATE STATISTICS only supports relation names in the FROM clause
 CREATE FUNCTION tftest(int) returns table(a int, b int) as $$
 SELECT $1, $1+i FROM generate_series(1,5) g(i);
 $$ LANGUAGE sql IMMUTABLE STRICT;
 CREATE STATISTICS alt_stat2 ON a FROM tftest(1);
-ERROR:  cannot create statistics on the specified relation
-DETAIL:  CREATE STATISTICS only supports tables, foreign tables and materialized views.
+ERROR:  CREATE STATISTICS only supports relation names in the FROM clause
 DROP FUNCTION tftest;
 -- incorrect expressions
 CREATE STATISTICS tst ON (y) FROM ext_stats_test; -- single column reference
-- 
2.51.0