更新时间:2026-07-28 GMT+08:00
分享

概述

libpq接口参考提供给用户一套数据库C语言客户端开发所需的核心API函数。这些函数按功能分类组织,涵盖了从连接建立、SQL执行、异步处理到结果集处理的完整开发流程。

开发者可根据实际需求查阅对应分类,快速定位所需函数。当前不支持通过libpq调用PQfn接口;本节将对部分常用接口做具体描述,若涉及其他接口可参考链接。libpq接口参考共分为以下6个主要部分:

  • 数据库连接控制函数

    数据库连接控制函数控制与数据库服务器的连接。一个应用程序一次可以与多个服务器建立连接,例如一个客户端连接多个数据库的场景。支持每个连接都是用一个从函数PQconnectdb、PQconnectdbParams或PQsetdbLogin获得的PGconn对象表示。也可以支持PQconnectStart接口结合异步PQconnectPoll轮询方式获得连接对象。注意,这些函数总是返回一个非空的对象指针,除非内存分配失败,会返回一个空的指针。连接建立的接口保存在PGconn对象中,可以调用PQstatus函数来检查返回值查看连接是否成功。由于PGconn对象将SSL上下文存储在线程本地,所以PGconn的释放线程应与申请线程一致。

  • 数据库执行语句函数

    与数据库服务器的连接成功建立,便可以使用该章节描述的函数执行SQL查询和命令。是libpq最常用的功能接口。

  • 异步命令处理函数

    异步命令处理函数用于实现非阻塞的SQL执行,适用于高并发、低延迟或需要同时处理多个命令的场景。该类函数允许应用程序在不阻塞当前线程的情况下发送SQL命令、轮询命令执行状态等。

  • 取消查询处理中函数

    取消查询处理中函数用于在查询执行过程中主动中断正在运行的SQL语句。该类函数主要用于长时间查询的超时控制、用户主动取消操作、异常情况下的快速中断等。

  • 数据库结果处理函数

    数据库结果处理函数用于解析和提取PQexec或异步执行返回的PGresult结果集。该类函数提供行数、列数获取、字段值提取与空值判断等功能。

  • XA协议函数

    XA协议是X/Open组织提出的分布式事务处理标准,为应用程序和数据库管理系统(DBMS)提供一致的接口,以支持分布式事务处理。

    xa_switch_t结构体包含了XA协议一系列的函数指针。libpq提供的xa_switch_t的变量名为xagsw。

    相关信息说明如下:

    表1 xa_switch_t结构体

    变量名称

    说明

    char name[RMNAMESZ]

    资源管理器名称。libpq指定值为gauss_xa。

    long flags

    资源管理器提供的选项。libpq指定值为TMNOMIGRATE。

    long version

    资源管理器的版本。

    int (*xa_open_entry)(char *, int, long)

    xa_open函数指针。

    int (*xa_close_entry)(char *, int, long)

    xa_close函数指针。

    int (*xa_start_entry)(XID *, int, long)

    xa_start函数指针。

    int (*xa_end_entry)(XID *, int, long)

    xa_end函数指针。

    int (*xa_rollback_entry)(XID *, int, long)

    xa_rollback函数指针。

    int (*xa_prepare_entry)(XID *, int, long)

    xa_prepare函数指针。

    int (*xa_commit_entry)(XID *, int, long)

    xa_commit函数指针。

    int (*xa_recover_entry)(XID *, long, int, long)

    xa_recover函数指针。

    int (*xa_forget_entry)(XID *, int, long)

    xa_forget函数指针。libpq暂不支持。

    int (*xa_complete_entry)(int *, int *, int, long)

    xa_complete函数指针。libpq暂不支持。

    表2 XID结构体

    变量名称

    说明

    long formatID

    格式标识符。

    long gtrid_length

    全局事务标识的字节长度。最大值为64。

    long bqual_length

    分支标识的字节长度。最大值为64。

    char data[XIDDATASIZE]

    全局事务标识和分支标识的组合数据,总共128个字节。

    表3 操作选项常量

    常量名称

    说明

    TMNOFLAGS

    无特殊标志,使用默认行为。

    TMSUCCESS

    操作成功执行。

    表4 返回值常量

    常量名称

    说明

    XA_OK

    操作成功完成。

    XAER_RMERR

    资源管理器内部错误。

    XAER_INVAL

    调用参数无效。

    XAER_PROTO

    违反XA协议状态机。

    XAER_DUPID

    重复的事务分支ID。

    XA_RBROLLBACK

    回滚是由未指明的原因引起的。

    XAER_NOTA

    指定XID不存在。

    • libpq的XA协议函数只支持A兼容库,推荐单线程调用。
    • xa_recover函数仅支持查询使用libpq的XA协议函数prepare的事务列表。
    • 应在调用xa_start和xa_end函数之间执行业务SQL操作。

以上各部分函数相互配合,共同构成libpq功能体系。

相关文档