libpq 是 PostgreSQL 的官方C应用程序编程接口,它提供了一套库函数,使客户端应用程序能够与 PostgreSQL 服务器通信。
其他应用程序接口,如 C++、Perl、Python、Tcl 和 ECPG,以及像 psql 这样的客户端应用程序,都基于 libpq,并继承了它的一些行为和环境配置。
历史说明:libpq 中的“pq”源自 PostQUEL(参见 PostgreSQL 简史)。
用法
编译时特性可用性
从 PostgreSQL 14 开始,libpq 提供了一系列 LIBPQ_HAS_XXX 宏,可用于测试特定特性的存在。请参见 src/interfaces/libpq/libpq-fe.h。
变更历史
不完整,仍在进行中!
- PostgreSQL 19
- 添加了连接参数
servicefile(提交 092f3c63)
- 添加了连接参数
- PostgreSQL 18
- 添加了函数
PQfullProtocolVersion()(提交 cdb6b0fd) - 类型
pg_int64已弃用(提交 3c86223c) - 添加了
min_protocol_version和max_protocol_version连接参数(提交 285613c6) - 添加了
sslkeylogfile(提交 2da74d8d) - 添加了
oauth_issuer、oauth_client_id、oauth_client_secret和oauth_scope连接参数(提交 b3f0be78) - 添加了函数
PQservice()(提交 4b99fed7) 在提交 fef6da9e 中已撤销)
- 添加了函数
- PostgreSQL 17
- 添加了用于关闭 Portal 和 Statement 的以下函数(提交 28b57265)
PQclosePrepared()PQclosePortal()PQsendClosePrepared()PQsendClosePortal()
- 添加了函数
PQchangePassword()(提交 a7be2a6c) - 添加了函数
PQsendPipelineSync()(提交 4794c2d3) - 添加了以下非阻塞查询取消函数(提交 61461a30)
PQcancelCreate()PQcancelStart()PQcancelPoll()PQcancelReset()PQcancelBlocking()
- 添加了函数
PQsocketPoll()(提交 f5e4dedf) - 添加了函数
PQsetChunkedRowsMod()(提交 4643a2b2) - 添加了连接参数
sslnegotiation(提交 d39a49c1)
- 添加了用于关闭 Portal 和 Statement 的以下函数(提交 28b57265)
- PostgreSQL 16
- PostgreSQL 15
- PostgreSQL 14
in_hot_standby现在由PQparameterStatus()报告(提交 bf8a662c)- 添加了 pipeline 模式(提交 acb7e4eb)
- 改进了
PQtrace()的输出格式(提交 198b3716) - 在
target_session_attrs中添加了选项read-only、primary、standby和prefer-standby(提交 ee28cacf) - SSL 连接默认设置了服务器名称指示(SNI)(提交 5c55dc8b)
- 添加了连接参数
sslsni(提交 5c55dc8b) - 添加了连接参数
sslcrldir(提交 f5465fad) - 移除了已弃用的连接参数
authtype和tty(提交 14d9b376)
- PostgreSQL 13
- PostgreSQL 12
- PostgreSQL 10
- 添加了连接参数
passfile(提交 ba005f19) - 添加了
target_session_attrs连接参数(提交 721f7bd3) - 添加了函数
PQencryptPasswordConn()(提交 8f8b9be5)
- 添加了连接参数
- PostgreSQL 9.4
- PostgreSQL 9.3
- 添加了函数
PQconninfo()(提交 65c3bf19)
- 添加了函数
- PostgreSQL 9.2
- PostgreSQL 9.1
- PostgreSQL 9.0
- 添加了连接参数
application_name和fallback_application_name(初始提交 3dfcf8cc) - 添加了连接参数
keepalives、keepalives_count、keepalives_idle和keepalives_interval(提交 d8cd283a) - 添加了连接参数
replication(提交 40f908bd)
- 添加了连接参数
- PostgreSQL 8.4
- PostgreSQL 8.3
- 添加了连接参数
gsslib(提交 f70866fb)
- 添加了连接参数
- PostgreSQL 8.1
- 添加了连接参数
krbsrvname(提交 72c53ac3)
- 添加了连接参数
- PostgreSQL 8.0
- PostgreSQL 7.4
- PostgreSQL 7.3
- 添加了连接参数
connect_timeout(提交 f0ed4311)
- 添加了连接参数
- PostgreSQL 7.1
- PostgreSQL 7.0
- PostgreSQL 6.3
- 弃用了连接参数
authtype(提交 d5bbe2ac)
- 弃用了连接参数
- PostgreSQL 6.1
- 添加了连接参数
authtype和password(提交 3a7c93e7)
- 添加了连接参数
- PostgreSQL 6.0
示例
以下示例代码演示了如何使用 libpq 连接到 PostgreSQL 服务器并执行一个简单的查询——“SELECT 'hello world'”——然后显示输出。
#include <stdio.h>
#include <stdlib.h>
#include <libpq-fe.h>
static void exit_nicely(PGconn *conn) { PQfinish(conn); exit(1); } int main(int argc, char **argv) { const char *conninfo; PGconn *conn; PGresult *res; if (argc > 1) conninfo = argv[1]; else conninfo = "dbname=postgres"; /* Connect to the database */ conn = PQconnectdb(conninfo); /* Verify success of database connection */ if (PQstatus(conn) != CONNECTION_OK) { fprintf(stderr, "Connection to database failed: %s", PQerrorMessage(conn)); exit_nicely(conn); } /* Execute a simple query and display the results */ res = PQexec(conn, "SELECT 'Hello World'"); printf("%s\n", PQgetvalue(res, 0, 0)); PQclear(res); /* close the connection to the database and cleanup */ PQfinish(conn); return 0; }
更多示例可以在 PostgreSQL 手册以及 PostgreSQL 源代码分发版中的 src/test/examples/ 目录中找到。
参考资料
- PostgreSQL 文档: libpq - C 库
- PostgreSQL 文档: libpq 环境变量
分类
反馈
请在此处 提交有关“libpq”的任何评论、建议或更正。