↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 7.0 / 6.5 / 6.4
历史版本PostgreSQL 6.4 已于 2003 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

第 53 章 libpq

libpq 是 Postgres 的 C 应用程序员接口。libpq 是一组库例程,客户端程序通过它们可以向 Postgres 后端服务器传送查询并接收这些查询的结果。libpq 也是其他几个 Postgres 应用接口的底层引擎,包括 libpq++(C++)、 libpgtcl(Tcl)、perl5 和 ecpg。因此,即使你使用的是上述某个软件包,libpq 行为的某些方面对你来说也很重要。 本节末尾包含三个简短程序,展示如何编写使用 libpq 的程序。下列目录中还有几个完整的 libpq 应用程序示例:

    ../src/test/regress
    ../src/test/examples
    ../src/bin/psql

使用 libpq 的前端程序必须包含头文件 libpq-fe.h,并且必须与 libpq 库链接。

53.1. 数据库连接函数

下面的例程用于建立与 Postgres 后端服务器的连接。一个应用程序可以同时打开多个后端连接(原因之一是需要访问多个数据库)。每个连接由一个 PGconn 对象表示,该对象通过 PQconnectdb() 或 PQsetdbLogin() 获得。注意,除非内存太少以至于连 PGconn 对象都无法分配,这些函数总是返回一个非空的对象指针。在通过连接对象发送查询之前,应当调用 PQstatus 函数检查连接是否成功建立。

  • PQsetdbLogin 与后端建立一个新连接。

    PGconn *PQsetdbLogin(const char *pghost,
                    const char *pgport,
                    const char *pgoptions,
                    const char *pgtty,
                    const char *dbName,
                    const char *login,
                    const char *pwd)
    

    如果任何参数为 NULL,则检查相应的环境变量(见"环境变量"一节)。如果环境变量也未设置,则使用硬编码的默认值。返回值是指向一个抽象 struct 的指针,该结构表示到后端的连接。

  • PQsetdb 与后端建立一个新连接。

    PGconn *PQsetdb(char *pghost,
                    char *pgport,
                    char *pgoptions,
                    char *pgtty,
                    char *dbName)
    

    这是一个宏,以空指针作为 login 和 pwd 参数调用 PQsetdbLogin()。它主要是为了与旧程序保持向后兼容而保留。

  • PQconnectdb 与后端建立一个新连接。

    PGconn *PQconnectdb(const char *conninfo)
    

    此例程使用从一个字符串中取得的参数打开一个新的数据库连接。与 PQsetdbLogin() 不同,该例程的参数集可以在不改变函数签名的情况下扩展,因此新的应用程序编程鼓励使用此例程。传入的字符串可以为空以使用全部默认参数,也可以包含一个或多个用空白分隔的参数设置。每个参数设置的形式为 keyword = value。(要写入空值或包含空格的值,请用单引号包围,例如 keyword = 'a value'。值中的单引号必须写作 \'. 等号两边的空格是可选的。)目前可识别的参数关键字有:

    • host —— 要连接的主机。如果指定了非零长度的字符串,则使用 TCP/IP 通信。没有主机名时,libpq 将使用本地 Unix 域套接字连接。

    • port —— 服务器主机上要连接的端口号,或 Unix 域连接的套接字文件名扩展。

    • dbname —— 数据库名。

    • user —— 用于认证的用户名。

    • password —— 当后端要求密码认证时使用的密码。

    • authtype —— 授权类型。(已不再使用,因为现在由后端自行选择如何对用户进行认证。为了向后兼容,libpq 仍接受并忽略此关键字。)

    • options —— 要发送给后端的跟踪/调试选项。

    • tty —— 用于后端可选调试输出的文件或 tty。

    与 PQsetdbLogin 一样,PQconnectdb 对未指定的选项使用环境变量或内建默认值。

  • PQconndefaults 返回默认的连接选项。

    PQconninfoOption *PQconndefaults(void)
    
    struct PQconninfoOption
            {
                    char   *keyword;   /* The keyword of the option */
                    char   *envvar;    /* Fallback environment variable name */
                    char   *compiled;  /* Fallback compiled in default value */
                    char   *val;       /* Option's value */
                    char   *label;     /* Label for field in connect dialog */
                    char   *dispchar;  /* Character to display for this field
                                          in a connect dialog. Values are:
                                          ""        Display entered value as is
                                          "*"       Password field - hide value
                                          "D"       Debug options - don't
                                          create a field by default */
                    int     dispsize;  /* Field size in characters for dialog */
            };
    

    返回连接选项结构的地址。它可用来确定 PQconnectdb 的所有可用选项及其当前默认值。返回值指向一个 PQconninfoOption struct 数组,该数组以一个 keyword 指针为 NULL 的条目结尾。注意,默认值("val" 字段)依赖于环境变量和其他上下文。调用者必须将连接选项数据视为只读。

  • PQfinish 关闭与后端的连接,同时释放 PGconn 对象使用的内存。

    void PQfinish(PGconn *conn)
    

    注意,即使与后端的连接尝试失败(由 PQstatus 指示),应用也应调用 PQfinish 释放 PGconn 对象使用的内存。调用过 PQfinish 之后,不应再使用该 PGconn 指针。

  • PQreset 重置与后端的通信端口。

    void PQreset(PGconn *conn)
    

    此函数将关闭与后端的连接,并尝试使用先前使用的全部相同参数与同一个 postmaster 重新建立新连接。如果工作中的连接丢失,这可用于错误恢复。

libpq 应用程序员应注意维护 PGconn 的抽象。请使用下面的访问函数获取 PGconn 的内容。避免直接引用 PGconn 结构的字段,因为它们将来可能改变。(从 Postgres 6.4 版开始,libpq-fe.h 中甚至不再提供 struct PGconn 的定义。如果你有直接访问 PGconn 字段的旧代码,可以通过同时包含 libpq-int.h 继续使用它,但我们建议你尽快修改这些代码。)

  • PQdb 返回连接的数据库名。

    char *PQdb(PGconn *conn)
    

    PQdb 及其后面几个函数返回在建立连接时确定的值。这些值在 PGconn 对象的整个生命周期内保持不变。

  • PQuser 返回连接的用户名。

    char *PQuser(PGconn *conn)
    
  • PQpass 返回连接的密码。

    char *PQpass(PGconn *conn)
    
  • PQhost 返回连接的服务器主机名。

    char *PQhost(PGconn *conn)
    
  • PQport 返回连接的端口。

    char *PQport(PGconn *conn)
    
  • PQtty 返回连接的调试 tty。

    char *PQtty(PGconn *conn)
    
  • PQoptions 返回连接中使用的后端选项。

    char *PQoptions(PGconn *conn)
    
  • PQstatus 返回连接的状态。状态可以是 CONNECTION_OK 或 CONNECTION_BAD。

    ConnStatusType *PQstatus(PGconn *conn)
    

    失败的连接尝试由状态 CONNECTION_BAD 表示。通常,OK 状态会一直保持到调用 PQfinish 为止,但通信故障可能导致状态提前变为 CONNECTION_BAD。此时应用可以尝试调用 PQreset 来恢复。

  • PQerrorMessage 返回连接上最近一次操作所产生的错误消息。

    char *PQerrorMessage(PGconn* conn);
    

    几乎所有 libpq 函数在失败时都会设置 PQerrorMessage。注意,按照 libpq 的惯例,非空的 PQerrorMessage 会包含一个末尾换行符。

  • PQbackendPID 返回处理此连接的后端服务器的进程 ID。

    int PQbackendPID(PGconn *conn);
    

    后端 PID 可用于调试,也可用于与 NOTIFY 消息(其中包含发出通知的后端的 PID)进行比较。注意,该 PID 属于数据库服务器主机上执行的进程,而不是本地主机上的进程!

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。