char *fmt_singular, const char *fmt_plural,
unsigned long n, ...)</function> is like <function>errmsg</function>, but with
support for various plural forms of the message.
<replaceable>fmt_singular</replaceable> is the English singular format,
<replaceable>fmt_plural</replaceable> is the English plural format,
<replaceable>n</replaceable> is the integer value that determines which plural
form is needed, and the remaining arguments are formatted according
to the selected format string. For more information see
<xref linkend="nls-guidelines"/>.
</para>
</listitem>
<listitem>
<para>
<function>errdetail(const char *msg, ...)</function> supplies an optional
<quote>detail</quote> message; this is to be used when there is additional
information that seems inappropriate to put in the primary message.
The message string is processed in just the same way as for
<function>errmsg</function>.
</para>
</listitem>
<listitem>
<para>
<function>errdetail_internal(const char *msg, ...)</function> is the same
as <function>errdetail</function>, 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>
<para>
<function>errdetail_plural(const char *fmt_singular, const char *fmt_plural,
unsigned long n, ...)</function> is like <function>errdetail</function>, but with
support for various plural forms of the message.
For more information see <xref linkend="nls-guidelines"/>.
</para>
</listitem>
<listitem>
<para>
<function>errdetail_log(const char *msg, ...)</function> is the same as
<function>errdetail</function> except that this string goes only to the server
log, never to the client. If both <function>errdetail</function> (or one of
its equivalents above) and
<function>errdetail_log</function> 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>errdetail_log_plural(const char *fmt_singular, const char
*fmt_plural, unsigned long n, ...)</function> is like
<function>errdetail_log</function>, but with support for various plural forms of
the message.
For more information see <xref linkend="nls-guidelines"/>.
</para>
</listitem>
<listitem>
<para>
<function>errhint(const char *msg, ...)</function> supplies an optional
<quote>hint</quote> message; this is to be used when offering suggestions
about how to fix the problem, as opposed to factual details about
what went wrong.
The message string is processed in just the same way as for
<function>errmsg</function>.
</para>
</listitem>
<listitem>
<para>
<function>errhint_plural(const char *fmt_singular, const char *fmt_plural,
unsigned long n, ...)</function> is like <function>errhint</function>, but with
support for various plural forms of the message.
For more information see <xref linkend="nls-guidelines"/>.
</para>
</listitem>
<listitem>
<para>
<function>errcontext(const char *msg, ...)</function> is not normally called
directly from an <function>ereport</function> message site; rather it is used
in <literal>error_context_stack</literal> callback functions to provide
information about the context in which an error occurred, such as the
current location in a PL function.
The message string is processed in just the same way as for
<function>errmsg</function>. Unlike the other auxiliary functions, this can