diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index 9005b261cda..5b7554b6ea1 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); @@ -1458,6 +1463,11 @@ EmitErrorReport(void) * where it would have much less information available. emit_log_hook is * intended for custom log filtering and custom log message transmission * mechanisms. + * + * The log hook has access to both the translated and original English + * error message text, which is passed through to allow it to be used + * as a message identifier. Note that the original text is not available + * for detail, detail_log, hint and context text elements. */ if (edata->output_to_server && emit_log_hook) (*emit_log_hook) (edata); diff --git a/src/include/utils/elog.h b/src/include/utils/elog.h index 326896f0204..7d338dd1cea 100644 --- a/src/include/utils/elog.h +++ b/src/include/utils/elog.h @@ -349,11 +349,12 @@ typedef struct ErrorData const char *domain; /* message domain */ const char *context_domain; /* message domain for context message */ int sqlerrcode; /* encoded ERRSTATE */ - char *message; /* primary error message */ + char *message; /* primary error message (translated) */ char *detail; /* detail error message */ 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 (original English text) */ char *schema_name; /* name of schema */ char *table_name; /* name of table */ char *column_name; /* name of column */