Re: misleading error message in ProcessUtilitySlow T_CreateStatsStmt

Поиск
Список
Период
Сортировка
От Álvaro Herrera
Тема Re: misleading error message in ProcessUtilitySlow T_CreateStatsStmt
Дата
Msg-id 202510201522.r7i6dr2wm2h7@alvherre.pgsql
обсуждение исходный текст
Ответ на Re: misleading error message in ProcessUtilitySlow T_CreateStatsStmt  (jian he <jian.universality@gmail.com>)
Список pgsql-hackers
On 2025-Oct-20, jian he wrote:

> @@ -15632,11 +15623,6 @@ ATPostAlterTypeParse(Oid oldId, Oid oldRelId,
> Oid refRelId, char *cmd,
>   querytree_list = lappend(querytree_list, stmt);
>   querytree_list = list_concat(querytree_list, afterStmts);
>   }
> - else if (IsA(stmt, CreateStatsStmt))
> - querytree_list = lappend(querytree_list,
> - transformStatsStmt(oldRelId,
> - (CreateStatsStmt *) stmt,
> - cmd));
> 
> The above "cmd" is the queryString, which is useful for error reporting.
> 
> create table t(a  int);
> create statistics xxx on (a + 1 is not null) from t;
> alter table t alter column a set data type text;
> 
> with patch, v4-0001-Restructure-CreateStatsStmt-parse-analysis-proces.patch
> ERROR:  operator does not exist: text + integer
> DETAIL:  No operator of that name accepts the given argument types.
> HINT:  You might need to add explicit type casts.
> 
> In the master branch, the error message also includes the error position.
> ERROR:  operator does not exist: text + integer
> LINE 1: alter table t alter column a set data type text;
>                                             ^
> DETAIL:  No operator of that name accepts the given argument types.
> HINT:  You might need to add explicit type casts.

Interesting, thanks for the example.

I think this example illustrates very well why the 'cmd' is rather
useless here -- note how the error message refers to an operator that
appears nowhere in the query string.  The user says "SET DATA TYPE text"
and then we complain about the "text+integer" operator?  That makes no
sense and I don't think it's in any way useful.

I think a user-friendly thing we could do is add an errcontext callback
that shows that we're trying to reapply a statistics object.  We should
discuss that in a separate thread for a separate patch though, and also
I don't think that thread should prevent this rework from being applied
now.  We could add this test scenario to the regression tests though, if
only to show how it would change later.

-- 
Álvaro Herrera               48°01'N 7°57'E  —  https://www.EnterpriseDB.com/



В списке pgsql-hackers по дате отправления: