The <structname>PGresult</structname> represents a pipeline that has
received an error from the server. <function>PQgetResult</function>
must be called repeatedly, and each time it will return this status code
until the end of the current pipeline, at which point it will return
<literal>PGRES_PIPELINE_SYNC</literal> and normal processing can
resume.
</para>
</listitem>
</varlistentry>
</variablelist>
If the result status is <literal>PGRES_TUPLES_OK</literal>,
<literal>PGRES_SINGLE_TUPLE</literal>, or
<literal>PGRES_TUPLES_CHUNK</literal>, then
the functions described below can be used to retrieve the rows
returned by the query. Note that a <command>SELECT</command>
command that happens to retrieve zero rows still shows
<literal>PGRES_TUPLES_OK</literal>.
<literal>PGRES_COMMAND_OK</literal> is for commands that can never
return rows (<command>INSERT</command> or <command>UPDATE</command>
without a <literal>RETURNING</literal> clause,
etc.). A response of <literal>PGRES_EMPTY_QUERY</literal> might
indicate a bug in the client software.
</para>
<para>
A result of status <symbol>PGRES_NONFATAL_ERROR</symbol> will
never be returned directly by <xref linkend="libpq-PQexec"/> or other
query execution functions; results of this kind are instead passed
to the notice processor (see <xref
linkend="libpq-notice-processing"/>).
</para>
</listitem>
</varlistentry>
<varlistentry id="libpq-PQresStatus">
<term><function>PQresStatus</function><indexterm><primary>PQresStatus</primary></indexterm></term>
<listitem>
<para>
Converts the enumerated type returned by
<xref linkend="libpq-PQresultStatus"/> into a string constant describing the
status code. The caller should not free the result.
<synopsis>
char *PQresStatus(ExecStatusType status);
</synopsis>
</para>
</listitem>
</varlistentry>
<varlistentry id="libpq-PQresultErrorMessage">
<term><function>PQresultErrorMessage</function><indexterm><primary>PQresultErrorMessage</primary></indexterm></term>
<listitem>
<para>
Returns the error message associated with the command, or an empty string
if there was no error.
<synopsis>
char *PQresultErrorMessage(const PGresult *res);
</synopsis>
If there was an error, the returned string will include a trailing
newline. The caller should not free the result directly. It will
be freed when the associated <structname>PGresult</structname> handle is
passed to <xref linkend="libpq-PQclear"/>.
</para>
<para>
Immediately following a <xref linkend="libpq-PQexec"/> or
<xref linkend="libpq-PQgetResult"/> call,
<xref linkend="libpq-PQerrorMessage"/> (on the connection) will return
the same string as <xref linkend="libpq-PQresultErrorMessage"/> (on
the result). However, a <structname>PGresult</structname> will
retain its error message until destroyed, whereas the connection's
error message will change when subsequent operations are done.
Use <xref linkend="libpq-PQresultErrorMessage"/> when you want to
know the status associated with a particular
<structname>PGresult</structname>; use
<xref linkend="libpq-PQerrorMessage"/> when you want to know the
status from the latest operation on the connection.
</para>
</listitem>
</varlistentry>
<varlistentry id="libpq-PQresultVerboseErrorMessage">
<term><function>PQresultVerboseErrorMessage</function><indexterm><primary>PQresultVerboseErrorMessage</primary></indexterm></term>
<listitem>
<para>
Returns a reformatted version of the error message associated with