I am maintaining code that uses libpq, and takes PGRES_FATAL_ERROR to
mean the database connection can no longer be used. However, this
does not appear to be true in all cases. I have found that
PGRES_FATAL_ERROR is returned by all queries within a transaction
after any previous query fails. Unfortunately, I have no good way to
distinguish this situation (which merely requires a ROLLBACK) from an
actual fatal error. I don't want to parse the text from
PQresultErrorMessage(), because I don't believe it's guaranteed to
remain consistent between versions and locales. Is there another way
to tell the difference?
Why isn't PGRES_NONFATAL_ERROR returned for queries in an aborted
transaction state? PGRES_FATAL_ERROR seems like a lie, since the
error is not fatal.