libpq is thread-safe as of
Postgres 7.0, so long as no two
threads attempt to manipulate the same PGconn object at the same
time. In particular, you can't 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 multi-thread programs. PQoidStatus can be replaced by PQoidValue. There is no good reason to call
fe_setauthsvc at all.