libpq is thread-safe as of
PostgreSQL 7.0, so long as no two threads
attempt to manipulate the same PGconn object at the same
time. In particular, you cannot issue concurrent queries from different
threads through the same connection object. (If you need to run
concurrent queries, start up multiple connections.)
PGresult objects are read-only after creation, and so can be passed around
freely between threads.
The deprecated functions PQoidStatus and
fe_setauthsvc are not thread-safe and should not be
used in multithread programs. PQoidStatus can be
replaced by PQoidValue. There is no good reason to
call fe_setauthsvc at all.
Libpq clients using the crypt
encryption method rely on the crypt() operating
system function, which is often not thread-safe. It is better to use
MD5 encryption, which is thread-safe on all
platforms.