27.12. 在多线程程序里的行为

如果在制作 PostgreSQL 发布的时候,使用了 configure 的命令行参数 --enable-thread-safety, 那么 libpq 是可重入的并且是线程安全的。另外,在你编译自己的应用代码时, 可能需要使用额外的编译器命令行选项。请参考你的系统的文档获取有关如何编译多线程应用的信息。

一个现实是,两个线程不能试图同时操作同一个 PGconn 对象。 特别是,你不能从不同的线程里通过同一个连接对象发出并发的命令。 (如果你需要运行并行命令,请启动多个连接。)

PGresult对象在创建后是只读的,因此可以自由地在线程之间传递。

过时了的函数 PQoidStatusfe_setauthsvc 都是线程不安全的, 因此不应该在一个多线程的程序里面使用。 PQoidStatus 可以由 PQoidValue代替。而我们觉得根本没有调用 fe_setauthsvc 的必要。

libpq 客户端使用的 crypt 加密方法倚赖 crypt() 系统函数,它通常不是线程安全的。 我们最好使用 MD5 加密,它在所有平台上是线程安全的。