CREATE STATISTICS: improve misleading error message
authorPeter Eisentraut <peter@eisentraut.org>
Mon, 15 Sep 2025 09:38:58 +0000 (11:38 +0200)
committerPeter Eisentraut <peter@eisentraut.org>
Mon, 15 Sep 2025 09:43:34 +0000 (11:43 +0200)
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.

Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/CACJufxEZ48toGH0Em_6vdsT57Y3L8pLF=DZCQ_gCii6=C3MeXw@mail.gmail.com

src/backend/tcop/utility.c
src/test/regress/expected/stats_ext.out

index 5f442bc3bd4e166dfa8e2db547d306068e020ca0..918db53dd5e7ddc0ea8a306ac1a9227c545e873f 100644 (file)
@@ -1874,8 +1874,7 @@ 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.")));
+                                errmsg("CREATE STATISTICS only supports relation names in the FROM clause")));
 
                    /*
                     * CREATE STATISTICS will influence future execution plans
index a1f83b58b23981609a7fc10cf23d71327eb2da4a..fdc0aa130bdb8c5d606186efd853486b45a685d7 100644 (file)
@@ -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