summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/src/sgml/sources.sgml25
-rw-r--r--src/backend/utils/error/elog.c27
-rw-r--r--src/include/utils/elog.h6
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. */