From: | Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> |
---|---|
To: | Kyotaro HORIGUCHI <horiguchi(dot)kyotaro(at)lab(dot)ntt(dot)co(dot)jp> |
Cc: | PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Identifying a message in emit_log_hook. |
Date: | 2016-02-16 09:57:33 |
Message-ID: | CAFj8pRCg0GpZwVB3ZdAw8YriWnZ+Ty6twQOCqpmXgcTvYXX-mQ@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi
2016-02-16 10:47 GMT+01:00 Kyotaro HORIGUCHI <
horiguchi(dot)kyotaro(at)lab(dot)ntt(dot)co(dot)jp>:
> Hello.
>
> I'm planning to change the error level of a specific error
> message. We can use emit_log_hook for this purpose but we have
> no reliable means to identify what a message is.
>
> For messages without valid sqlerrcode, filename:lineno could be
> used to identify but lineno is too unstable. One possible and
> most straightforward way to solve this is defining identifiers
> covering all error messages but such identifiers are too hard to
> manage. ErrorData.message could also be used but NLS translation
> and placeholders prevent it from being identified by simple means
> like strcmp(3).
>
> As a solution for this problem, I'd like to porpose to have an
> additional member in the struct ErrorData to hold a message id,
> that is, the format string for errmsg(). This is not best but
> useful enough.
>
> It is somewhat a crude way, but the attached small patch would
> do.
>
> Is there any opinions or suggestions?
>
It looks like workaround. The fixing missing sqlerrcode is much better.
Regards
Pavel
>
> regards,
>
> --
> Kyotaro Horiguchi
> NTT Open Source Software Center
>
> diff --git a/src/backend/utils/error/elog.c
> b/src/backend/utils/error/elog.c
> index 9005b26..2d13101 100644
> --- a/src/backend/utils/error/elog.c
> +++ b/src/backend/utils/error/elog.c
> @@ -801,6 +801,7 @@ errmsg(const char *fmt,...)
> CHECK_STACK_DEPTH();
> oldcontext = MemoryContextSwitchTo(edata->assoc_context);
>
> + edata->message_id = fmt;
> EVALUATE_MESSAGE(edata->domain, message, false, true);
>
> MemoryContextSwitchTo(oldcontext);
> @@ -830,6 +831,7 @@ errmsg_internal(const char *fmt,...)
> CHECK_STACK_DEPTH();
> oldcontext = MemoryContextSwitchTo(edata->assoc_context);
>
> + edata->message_id = fmt;
> EVALUATE_MESSAGE(edata->domain, message, false, false);
>
> MemoryContextSwitchTo(oldcontext);
> @@ -853,6 +855,7 @@ errmsg_plural(const char *fmt_singular, const char
> *fmt_plural,
> CHECK_STACK_DEPTH();
> oldcontext = MemoryContextSwitchTo(edata->assoc_context);
>
> + edata->message_id = fmt_singular;
> EVALUATE_MESSAGE_PLURAL(edata->domain, message, false);
>
> MemoryContextSwitchTo(oldcontext);
> @@ -1361,6 +1364,7 @@ elog_finish(int elevel, const char *fmt,...)
> recursion_depth++;
> oldcontext = MemoryContextSwitchTo(edata->assoc_context);
>
> + edata->message_id = fmt;
> EVALUATE_MESSAGE(edata->domain, message, false, false);
>
> MemoryContextSwitchTo(oldcontext);
> @@ -1420,6 +1424,7 @@ format_elog_string(const char *fmt,...)
>
> oldcontext = MemoryContextSwitchTo(ErrorContext);
>
> + edata->message_id = fmt;
> EVALUATE_MESSAGE(edata->domain, message, false, true);
>
> MemoryContextSwitchTo(oldcontext);
> diff --git a/src/include/utils/elog.h b/src/include/utils/elog.h
> index 326896f..4df76da 100644
> --- a/src/include/utils/elog.h
> +++ b/src/include/utils/elog.h
> @@ -354,6 +354,7 @@ typedef struct ErrorData
> char *detail_log; /* detail error message for server
> log only */
> char *hint; /* hint message */
> char *context; /* context message */
> + const char *message_id; /* message id of .message */
> char *schema_name; /* name of schema */
> char *table_name; /* name of table */
> char *column_name; /* name of column */
>
>
> --
> Sent via pgsql-hackers mailing list (pgsql-hackers(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers
>
>
From | Date | Subject | |
---|---|---|---|
Next Message | Fabien COELHO | 2016-02-16 10:18:39 | Re: extend pgbench expressions with functions |
Previous Message | Kyotaro HORIGUCHI | 2016-02-16 09:47:55 | Identifying a message in emit_log_hook. |