pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
如果在构建 PostgreSQL 发行版时使用了 configure 命令行选项 --enable-thread-safety,则 libpq 是可重入且线程安全的。此外,编译应用程序代码时,可能还需要使用额外的编译器命令行选项。有关如何构建支持线程的应用程序,请参阅系统文档,或查看 src/Makefile.global 中的 PTHREAD_CFLAGS 和 PTHREAD_LIBS。
一项限制是:两个线程不能同时操作同一个 PGconn 对象。尤其不能通过同一个连接对象从不同线程并发发出命令。(如果需要并发执行命令,请使用多个连接。)
PGresult对象在创建后是只读的,因此可以在线程之间自由传递。
已弃用的函数 PQrequestCancel 和 PQoidStatus 不是线程安全的,不应在多线程程序中使用。PQrequestCancel 可以用 PQcancel 替代。PQoidStatus 可以用 PQoidValue 替代。
如果你在应用程序中使用 Kerberos(除了libpq内部之外),则需要在 Kerberos 调用周围加锁,因为 Kerberos 函数不是线程安全的。可参考libpq源代码中的PQregisterThreadLock函数,它提供了一种在libpq与应用程序之间协作加锁的方法。
如果你在多线程应用程序中遇到问题,请运行 src/tools/thread 目录中的程序,检查你的平台是否存在线程不安全的函数。configure 会运行这个程序,但对于二进制发行版,你自己的库可能与编译这些二进制文件时所用的 库不一致。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。