1
0
mirror of https://github.com/postgres/postgres.git synced 2025-10-18 04:29:09 +03:00

CREATE STATISTICS: improve misleading error message

The previous change (commit f225473cba) 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
This commit is contained in:
Peter Eisentraut
2025-09-15 11:38:58 +02:00
parent 4bd9191298
commit 9ec0b29976
2 changed files with 8 additions and 16 deletions

View File

@@ -1874,8 +1874,7 @@ ProcessUtilitySlow(ParseState *pstate,
if (!IsA(rel, RangeVar)) if (!IsA(rel, RangeVar))
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("cannot create statistics on the specified relation"), errmsg("CREATE STATISTICS only supports relation names in the FROM clause")));
errdetail("CREATE STATISTICS only supports tables, foreign tables and materialized views.")));
/* /*
* CREATE STATISTICS will influence future execution plans * CREATE STATISTICS will influence future execution plans

View File

@@ -56,29 +56,22 @@ CREATE STATISTICS tst (unrecognized) ON x, y FROM ext_stats_test;
ERROR: unrecognized statistics kind "unrecognized" ERROR: unrecognized statistics kind "unrecognized"
-- unsupported targets -- unsupported targets
CREATE STATISTICS tst ON a FROM (VALUES (x)) AS foo; CREATE STATISTICS tst ON a FROM (VALUES (x)) AS foo;
ERROR: cannot create statistics on the specified relation ERROR: CREATE STATISTICS only supports relation names in the FROM clause
DETAIL: CREATE STATISTICS only supports tables, foreign tables and materialized views.
CREATE STATISTICS tst ON a FROM foo NATURAL JOIN bar; CREATE STATISTICS tst ON a FROM foo NATURAL JOIN bar;
ERROR: cannot create statistics on the specified relation ERROR: CREATE STATISTICS only supports relation names in the FROM clause
DETAIL: CREATE STATISTICS only supports tables, foreign tables and materialized views.
CREATE STATISTICS tst ON a FROM (SELECT * FROM ext_stats_test) AS foo; CREATE STATISTICS tst ON a FROM (SELECT * FROM ext_stats_test) AS foo;
ERROR: cannot create statistics on the specified relation ERROR: CREATE STATISTICS only supports relation names in the FROM clause
DETAIL: CREATE STATISTICS only supports tables, foreign tables and materialized views.
CREATE STATISTICS tst ON a FROM ext_stats_test s TABLESAMPLE system (x); CREATE STATISTICS tst ON a FROM ext_stats_test s TABLESAMPLE system (x);
ERROR: cannot create statistics on the specified relation ERROR: CREATE STATISTICS only supports relation names in the FROM clause
DETAIL: CREATE STATISTICS only supports tables, foreign tables and materialized views.
CREATE STATISTICS tst ON a FROM XMLTABLE('foo' PASSING 'bar' COLUMNS a text); CREATE STATISTICS tst ON a FROM XMLTABLE('foo' PASSING 'bar' COLUMNS a text);
ERROR: cannot create statistics on the specified relation ERROR: CREATE STATISTICS only supports relation names in the FROM clause
DETAIL: CREATE STATISTICS only supports tables, foreign tables and materialized views.
CREATE STATISTICS tst ON a FROM JSON_TABLE(jsonb '123', '$' COLUMNS (item int)); CREATE STATISTICS tst ON a FROM JSON_TABLE(jsonb '123', '$' COLUMNS (item int));
ERROR: cannot create statistics on the specified relation ERROR: CREATE STATISTICS only supports relation names in the FROM clause
DETAIL: CREATE STATISTICS only supports tables, foreign tables and materialized views.
CREATE FUNCTION tftest(int) returns table(a int, b int) as $$ CREATE FUNCTION tftest(int) returns table(a int, b int) as $$
SELECT $1, $1+i FROM generate_series(1,5) g(i); SELECT $1, $1+i FROM generate_series(1,5) g(i);
$$ LANGUAGE sql IMMUTABLE STRICT; $$ LANGUAGE sql IMMUTABLE STRICT;
CREATE STATISTICS alt_stat2 ON a FROM tftest(1); CREATE STATISTICS alt_stat2 ON a FROM tftest(1);
ERROR: cannot create statistics on the specified relation ERROR: CREATE STATISTICS only supports relation names in the FROM clause
DETAIL: CREATE STATISTICS only supports tables, foreign tables and materialized views.
DROP FUNCTION tftest; DROP FUNCTION tftest;
-- incorrect expressions -- incorrect expressions
CREATE STATISTICS tst ON (y) FROM ext_stats_test; -- single column reference CREATE STATISTICS tst ON (y) FROM ext_stats_test; -- single column reference