diff options
-rw-r--r-- | doc/src/sgml/sources.sgml | 25 | ||||
-rw-r--r-- | src/backend/utils/error/elog.c | 27 | ||||
-rw-r--r-- | src/include/utils/elog.h | 6 |
3 files changed, 51 insertions, 7 deletions
diff --git a/doc/src/sgml/sources.sgml b/doc/src/sgml/sources.sgml index ac8f462de0e..4ed83d6189b 100644 --- a/doc/src/sgml/sources.sgml +++ b/doc/src/sgml/sources.sgml @@ -214,13 +214,12 @@ ereport(ERROR, </listitem> <listitem> <para> - <function>errdetail_log(const char *msg, ...)</function> is the same as - <function>errdetail</> except that this string goes only to the server - log, never to the client. If both <function>errdetail</> and - <function>errdetail_log</> are used then one string goes to the client - and the other to the log. This is useful for error details that are - too security-sensitive or too bulky to include in the report - sent to the client. + <function>errdetail_internal(const char *msg, ...)</function> is the same + as <function>errdetail</>, except that the message string will not be + translated nor included in the internationalization message dictionary. + This should be used for detail messages that are not worth expending + translation effort on, for instance because they are too technical to be + useful to most users. </para> </listitem> <listitem> @@ -233,6 +232,18 @@ ereport(ERROR, </listitem> <listitem> <para> + <function>errdetail_log(const char *msg, ...)</function> is the same as + <function>errdetail</> except that this string goes only to the server + log, never to the client. If both <function>errdetail</> (or one of + its equivalents above) and + <function>errdetail_log</> are used then one string goes to the client + and the other to the log. This is useful for error details that are + too security-sensitive or too bulky to include in the report + sent to the client. + </para> + </listitem> + <listitem> + <para> <function>errhint(const char *msg, ...)</function> supplies an optional <quote>hint</> message; this is to be used when offering suggestions about how to fix the problem, as opposed to factual details about diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index 337b875fe20..7c7927509b5 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -843,6 +843,33 @@ errdetail(const char *fmt,...) /* + * errdetail_internal --- add a detail error message text to the current error + * + * This is exactly like errdetail() except that strings passed to + * errdetail_internal are not translated, and are customarily left out of the + * internationalization message dictionary. This should be used for detail + * messages that seem not worth translating for one reason or another + * (typically, that they don't seem to be useful to average users). + */ +int +errdetail_internal(const char *fmt,...) +{ + ErrorData *edata = &errordata[errordata_stack_depth]; + MemoryContext oldcontext; + + recursion_depth++; + CHECK_STACK_DEPTH(); + oldcontext = MemoryContextSwitchTo(ErrorContext); + + EVALUATE_MESSAGE(detail, false, false); + + MemoryContextSwitchTo(oldcontext); + recursion_depth--; + return 0; /* return value does not matter */ +} + + +/* * errdetail_log --- add a detail_log error message text to the current error */ int diff --git a/src/include/utils/elog.h b/src/include/utils/elog.h index 4a3bd026895..93b141d6839 100644 --- a/src/include/utils/elog.h +++ b/src/include/utils/elog.h @@ -147,6 +147,12 @@ errdetail(const char *fmt,...) __attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); extern int +errdetail_internal(const char *fmt,...) +/* This extension allows gcc to check the format string for consistency with + the supplied arguments. */ +__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); + +extern int errdetail_log(const char *fmt,...) /* This extension allows gcc to check the format string for consistency with the supplied arguments. */ |