A libpq é reentrante e segura quanto a fluxos de execução (thread-safe), quando é utilizada a opção de linha de comando --enable-thread-safety do configure na construção da distribuição do PostgreSQL. Além disso, ao se compilar o código do aplicativo, podem ser necessárias opções adicionais de linha de comando do compilador. Para obter informações sobre como construir aplicativos com fluxos de execução deve ser consultada a documentação do sistema, ou procurar no arquivo src/Makefile.global por PTHREAD_CFLAGS e PTHREAD_LIBS.
Uma restrição é que dois fluxos não devem tentar manipular o mesmo objeto PGconn ao mesmo tempo. Em particular, não é possível emitir comandos concorrentes, através do mesmo objeto de conexão, a partir de fluxos de execução diferentes (Se for necessário executar comandos simultâneos, devem ser utilizadas várias conexões).
Os objetos PGresult, após serem criados, são apenas para leitura e, portanto, podem ser passados livremente entre os fluxos.
As funções em obsolescência PQrequestCancel, PQoidStatus e fe_setauthsvc não são seguras quanto a fluxos de execução, não devendo ser utilizadas em programas com vários fluxos de execução. A função PQrequestCancel pode ser substituída pela função PQcancel. A função PQoidStatus pode ser substituída pela função PQoidValue. Na verdade, não há nenhuma boa razão para se chamar a função fe_setauthsvc.
Os aplicativos libpq que utilizam o método de autenticação crypt dependem da função crypt() do sistema operacional, que geralmente não é segura quanto a fluxos de execução. É melhor utilizar o método md5, que é seguro quanto a fluxos de execução em todas as plataformas.
Ocorrendo problemas em aplicativos com fluxos de execução, deve ser executado o programa src/tools/thread para verificar se a plataforma utilizada possui funções não seguras quanto a fluxos de execução. Este programa é executado pelo configure, mas para as distribuições binárias a biblioteca sendo utilizada pode não corresponder à biblioteca utilizada para construir os binários.