选择 打开 改范围 完整检索页

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

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0
历史版本PostgreSQL 9.6 已于 2021 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本

第 32 章 libpq - C 库

libpqPostgreSQLC应用程序编程接口。libpq是一组库函数,客户端程序可用它们向PostgreSQL后端服务器发送查询并接收查询结果。

libpq也是其他几个PostgreSQL应用程序接口的底层引擎,包括为 C++、Perl、Python、Tcl 和ECPG编写的接口。因此,对于这些包的用户,libpq行为的某些方面也很重要。特别是,第 32.14 节第 32.15 节第 32.18 节描述了任何使用libpq的应用程序的用户都能观察到的行为。

本章末尾(第 32.21 节)包含一些简短程序,展示如何编写使用libpq的程序。源代码发行包的src/test/examples目录中还提供了几个完整的libpq应用程序示例。

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

32.1. 数据库连接控制函数 #

以下函数用于建立到PostgreSQL后端服务器的连接。应用程序可以同时保持多个后端连接。(这样做的原因之一是访问多个数据库。)每个连接由一个PGconn对象表示,该对象可以通过以下函数获取:PQconnectdbPQconnectdbParams,或PQsetdbLogin。注意,这些函数总是返回非空的对象指针,除非内存不足,甚至无法分配PGconn对象。应调用PQstatus函数检查返回值,确认连接成功后,再通过连接对象发送查询。

警告

如果不受信任的用户能够访问一个没有采用模式的安全使用方式的数据库,那么每个会话开始时都应从search_path中移除公开可写的模式。可以把参数关键词options设置为-csearch_path=。也可以在连接后发出PQexec(conn, "SELECT pg_catalog.set_config('search_path', '', false)")。这种考虑并非专门针对libpq;它适用于每一种可执行任意 SQL 命令的接口。

警告

在 Unix 上,对持有已打开 libpq 连接的进程执行 fork 操作可能导致不可预料的结果,因为父进程和子进程会共享相同的套接字和操作系统资源。出于这个原因,我们不推荐这样的用法,尽管从子进程执行一个exec来载入新的可执行程序是安全的。

PQconnectdbParams #

开启一个到数据库服务器的新连接。

PGconn *PQconnectdbParams(const char * const *keywords,
                          const char * const *values,
                          int expand_dbname);

这个函数使用从两个以NULL结尾的数组中取得的参数打开一个新的数据库连接。第一个数组keywords是一个字符串数组,其中每个元素都是一个关键词。第二个数组values给出每个关键词的值。和下面的PQsetdbLogin不同,参数集合可以在不改变函数签名的情况下扩展,因此对于新应用,最好使用这个函数(或者相应的非阻塞函数PQconnectStartParamsPQconnectPoll)。

当前能被识别的参数关键词被列举在第 32.1.2 节中。

传入的数组可以为空,以使用所有默认参数,也可以包含一个或多个参数设置。 两个数组的长度必须相同。处理会在 keywords 数组的第一个 NULL 元素处停止。 如果某个非 NULLkeywords 元素所对应的 values 元素为 NULL 或空字符串,则忽略这一项,继续处理下一对数组元素。

expand_dbname 非零时,会检查第一个 dbname 关键词的值是否为 连接字符串。如果是,就将其展开为从该字符串中提取的各个连接参数。 如果该值包含等号(=),或以 URI 方案标识符开头,就会将其视为连接字符串,而非单纯的数据库名。 (连接字符串格式的详细说明见第 32.1.1 节>。) 只有第一次出现的 dbname 会按这种方式处理;后续的 dbname 参数都作为普通数据库名处理。

通常会从头到尾处理参数数组。如果某个关键词重复出现,则采用最后一个非 NULL 且非空的值。 此规则也适用于连接字符串中的关键词与 keywords 数组中的关键词冲突的情况。 因此,程序员可以决定数组元素是覆盖连接字符串中的值,还是被这些值覆盖。 出现在要展开的 dbname 元素之前的数组元素,可以被连接字符串中的字段覆盖; 而这些字段又会被出现在 dbname 之后的数组元素覆盖(同样,只有这些元素提供非空值时才会覆盖)。

处理完所有数组元素及展开的连接字符串后,仍未设置的连接参数将填入默认值。 如果某个未设置参数对应的环境变量(见第 32.14 节>)已经设置,就使用该环境变量的值; 否则使用该参数的内置默认值。

PQconnectdb #

开启一个到数据库服务器的新连接。

PGconn *PQconnectdb(const char *conninfo);

这个函数使用从字符串conninfo中得到的参数开启一个新的数据库连接。

被传递的字符串可以为空,这样将会使用所有的默认参数。也可以包含由空白分隔的一个或多个参数设置,还可以包含一个URI。详见第 32.1.1 节

PQsetdbLogin #

开启一个到数据库服务器的新连接。

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

这是 PQconnectdb 的前身,使用固定的一组参数。除缺失参数始终采用默认值之外,功能相同。对于要使用默认值的任意固定参数,请传入 NULL 或空字符串。

如果 dbName 包含 = 符号,或具有有效的连接 URI 前缀,就会将其当作 conninfo 字符串处理,方式与将其传给 PQconnectdb 完全相同,然后按照 PQconnectdbParams 的规则应用其余参数。

PQsetdb #

开启一个到数据库服务器的新连接。

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

这是一个调用PQsetdbLogin的宏,其中为loginpwd参数使用空指针。提供它是为了向后兼容非常老的程序。

PQconnectStartParams
PQconnectStart
PQconnectPoll #

以非阻塞的方式建立一个到数据库服务器的连接。

PGconn *PQconnectStartParams(const char * const *keywords,
                             const char * const *values,
                             int expand_dbname);

PGconn *PQconnectStart(const char *conninfo);

PostgresPollingStatusType PQconnectPoll(PGconn *conn);

这三个函数被用来开启一个到数据库服务器的连接,这样你的应用的执行线程不会因为远程的I/O而被阻塞。这种方法的要点在于等待 I/O 完成可能在应用的主循环中发生,而不是在PQconnectdbParamsPQconnectdb中,并且因此应用能够把这种操作和其他动作并行处理。

PQconnectStartParams中,数据库连接使用从keywordsvalues数组中取得的参数创建,并且被expand_dbname控制,这和之前描述的PQconnectdbParams相同。

PQconnectStart中,数据库连接使用从字符串conninfo中取得的参数创建,这和之前描述的PQconnectdb相同。

无论是PQconnectStartParams还是PQconnectStart还是PQconnectPoll都不会阻塞,只要满足以下限制:

  • 必须恰当地使用 hostaddrhost 参数,以确保不会进行名称和反向名称查询。详细信息请参见 第 32.1.2 节 中这些参数的说明。

  • 如果你调用PQtrace,确保接收追踪输出的流对象不会阻塞。

  • 如后文所述,你要确保在调用PQconnectPoll之前,套接字处于合适的状态。

注意:PQconnectStartParams的用法与下文展示的PQconnectStart类似。

要开始无阻塞的连接请求,可调用conn = PQconnectStart("connection_info_string")。如果conn为空,则libpq无法分配一个新的PGconn结构体。否则,一个有效的PGconn指针会被返回(不过还没有表示一个到数据库的有效连接)。从PQconnectStart返回后,调用status = PQstatus(conn)。如果status等于CONNECTION_BAD,则PQconnectStart失败。

如果PQconnectStart成功,下一个阶段是轮询libpq,这样它能够继续进行连接序列。使用PQsocket(conn)来获得该数据库连接底层的套接字描述符。这样循环:如果PQconnectPoll(conn)上一次返回PGRES_POLLING_READING,等到该套接字准备好读取(按照select()poll()或类似的系统函数所指示的)。则再次调用PQconnectPoll(conn)。反之,如果PQconnectPoll(conn)上一次返回PGRES_POLLING_WRITING,等到该套接字准备好写入,则再次调用PQconnectPoll(conn)。如果你还没有调用过PQconnectPoll,即刚刚调用过PQconnectStart之后,行为就像是它上次返回了PGRES_POLLING_WRITING。持续这个循环直到PQconnectPoll(conn)返回PGRES_POLLING_FAILED指示连接过程已经失败,或者返回PGRES_POLLING_OK指示连接已经被成功地建立。

在连接过程中的任何时刻,都可以通过调用PQstatus来检查连接状态。如果该调用返回CONNECTION_BAD,则连接过程已经失败;如果返回CONNECTION_OK,则连接已就绪。通过以下函数的返回值也同样可以检测这两种状态:PQconnectPoll,该函数已在上文介绍。在异步连接过程中(也仅在此过程中)还可能出现其他状态。它们指明连接过程的当前阶段,例如可以用来向用户提供反馈。这些状态如下:

CONNECTION_STARTED #

等待连接被建立。

CONNECTION_MADE #

连接 OK,等待发送。

CONNECTION_AWAITING_RESPONSE #

等待来自服务器的一个回应。

CONNECTION_AUTH_OK #

收到认证,等待后端启动结束。

CONNECTION_SSL_STARTUP #

协商 SSL 加密。

CONNECTION_SETENV #

协商环境驱动的参数设置。

注意,虽然这些常量会保留下来以维持兼容性,但应用程序绝不能依赖它们按某种特定顺序出现、必定出现,或状态始终是这些已记录的值之一。应用程序可以采用类似以下的做法:

switch(PQstatus(conn))
{
        case CONNECTION_STARTED:
            feedback = "Connecting...";
            break;

        case CONNECTION_MADE:
            feedback = "Connected to server...";
            break;
.
.
.
        default:
            feedback = "Connecting...";
}

在使用PQconnectPoll时,连接参数connect_timeout会被忽略:判断是否超时是应用的责任。除此之外,PQconnectStart后面跟着PQconnectPoll循环等效于PQconnectdb

注意如果PQconnectStart返回一个非空的指针,你必须在用完它之后调用PQfinish来处理该结构体和任何相关的内存块。即使连接尝试失败或被放弃时也必须完成这些工作。

PQconndefaults #

返回默认连接选项。

PQconninfoOption *PQconndefaults(void);

typedef struct
{
    char   *keyword;   /* 该选项的关键词 */
    char   *envvar;    /* 后备环境变量名 */
    char   *compiled;  /* 编译时设置的后备默认值 */
    char   *val;       /* 选项的当前值,或者 NULL */
    char   *label;     /* 连接对话框中字段的标签 */
    char   *dispchar;  /* 指示如何在连接对话框中显示此字段。可取值:
                          ""        显示输入的值
                          "*"       密码字段 - 隐藏值
                          "D"       调试选项 - 默认不显示 */
    int     dispsize;  /* 对话框中的字段宽度,以字符计 */
} PQconninfoOption;

返回一个连接选项数组。这可以用来确定用于连接服务器的所有可能的PQconnectdb选项和它们的当前默认值。返回值指向一个PQconninfoOption结构体的数组,该数组以一个包含空keyword指针的条目结束。如果无法分配内存,则返回空指针。注意当前默认值(val字段)将依赖于环境变量和其他上下文。一个缺失或者无效的服务文件将会被无声地忽略掉。调用者必须把连接选项当作只读对待。

在处理完选项数组后,把它交给PQconninfoFree释放。如果没有这么做, 每次调用PQconndefaults都会导致一小部分内存泄漏。

PQconninfo #

返回被一个活动连接使用的连接选项。

PQconninfoOption *PQconninfo(PGconn *conn);

返回一个连接选项数组。可以用它确定所有可能的 PQconnectdb 选项,以及实际用于连接服务器的值。返回值指向一个 PQconninfoOption 结构体数组,该数组以 keyword 指针为空的条目结束。上文针对 PQconndefaults 的所有注意事项,也适用于 PQconninfo 的结果。

PQconninfoParse #

返回从提供的连接字符串中解析到的连接选项。

PQconninfoOption *PQconninfoParse(const char *conninfo, char **errmsg);

解析一个连接字符串并且将结果选项作为一个数组返回,或者在连接字符串有问题时返回NULL。这个函数可以用来抽取所提供的连接字符串中的PQconnectdb选项。返回值指向一个PQconninfoOption结构体的数组,该数组以一个包含空keyword指针的条目结束。

所有合法选项将出现在结果数组中,但是任何在连接字符串中没有出现的选项的PQconninfoOptionval会被设置为NULL,默认值不会被插入。

如果 errmsg 不是 NULL,则成功时将 *errmsg 设为 NULL; 失败时将其设为由 malloc 分配的、用于说明问题的错误字符串。 (也可能出现 *errmsg 被设为 NULL,同时函数返回 NULL 的情况;这表示内存不足。)

在处理完选项数组后,把它交给PQconninfoFree释放。如果没有这么做, 每次调用PQconninfoParse都会导致一小部分内存泄漏。反过来,如果发生一个错误并且errmsg不是NULL,确保使用PQfreemem释放错误字符串。

PQfinish #

关闭与服务器的连接。同时释放PGconn对象使用的内存。

void PQfinish(PGconn *conn);

注意,即使与服务器的连接尝试失败(由PQstatus指示),应用也应当调用PQfinish来释放PGconn对象使用的内存。不能在调用PQfinish之后再使用PGconn指针。

PQreset #

重置与服务器的通信通道。

void PQreset(PGconn *conn);

此函数将关闭与服务器的连接,并尝试重新建立到同一服务器的新连接,使用之前使用过的所有参数。 这可能有助于在工作连接丢失后的错误恢复。

PQresetStart
PQresetPoll #

以非阻塞方式重置与服务器的通信通道。

int PQresetStart(PGconn *conn);

PostgresPollingStatusType PQresetPoll(PGconn *conn);

这些函数会关闭与服务器的连接,并尝试重新建立到同一服务器的新连接,使用之前使用过的所有参数。如果原本可用的连接丢失,这可以用于错误恢复。它们与上文的 PQreset 不同之处在于采用非阻塞方式。它们受到与 PQconnectStartParamsPQconnectStartPQconnectPoll 相同的限制。

要开始重置连接,请调用 PQresetStart。如果返回 0,表示重置失败。如果返回 1,则使用 PQresetPoll 轮询重置过程,方式与使用 PQconnectPoll 建立连接完全相同。

PQpingParams #

PQpingParams报告服务器状态。它接受的连接参数与上文介绍的PQconnectdbParams相同。取得服务器状态不需要提供正确的用户名、密码或数据库名;但如果提供的值不正确,服务器会记录一次失败的连接尝试。

PGPing PQpingParams(const char * const *keywords,
                    const char * const *values,
                    int expand_dbname);

该函数返回以下值之一:

PQPING_OK #

服务器正在运行,并且看起来可以接受连接。

PQPING_REJECT #

服务器正在运行,但是处于一种不允许连接的状态(启动、关闭或崩溃恢复)。

PQPING_NO_RESPONSE #

无法联系到服务器。这可能表示服务器没有运行,或者给定的连接参数中有些错误(例如,错误的端口号),或者有一个网络连接问题(例如,一个防火墙阻断了连接请求)。

PQPING_NO_ATTEMPT #

没有尝试联系服务器,因为提供的参数显然不正确,或者有一些客户端问题(例如,内存用完)。

PQping #

PQping报告服务器状态。它接受的连接参数与上文介绍的PQconnectdb相同。取得服务器状态不需要提供正确的用户名、密码或数据库名;但如果提供的值不正确,服务器会记录一次失败的连接尝试。

PGPing PQping(const char *conninfo);

返回值与 PQpingParams 相同。

32.1.1. 连接字符串 #

几个libpq函数解析用户指定的字符串以获取连接参数。 这些字符串有两种被接受的格式:普通的keyword = value字符串和 RFC 3986 URI。

32.1.1.1. 关键词/值连接字符串

在第一种格式中,每一个参数设置的形式都是keyword = value。 设置的等号周围的空白是可选的。 要写一个空值或一个包含空白的值,将它用单引号包围,例如keyword = 'a value'。 值中的单引号和反斜线必须用一个反斜线转义,即\'\\

示例:

host=localhost port=5432 dbname=mydb connect_timeout=10

能被识别的参数关键词在第 32.1.2 节中列出。

32.1.1.2. 连接 URI

一个连接URI的一般形式是:

postgresql://[user[:password]@][host][:port][/dbname][?param1=value1&...]

URI模式标志符可以是postgresql://postgres://。 每一个剩下的URI部分都是可选的。 下列示例展示了合法的URI语法:

postgresql://
postgresql://localhost
postgresql://localhost:5433
postgresql://localhost/mydb
postgresql://user@localhost
postgresql://user:secret@localhost
postgresql://other@localhost/otherdb?connect_timeout=10&application_name=myapp

通常出现在URI的层次部分的值,也能够以命名参数的方式给出。例如:

postgresql:///mydb?host=localhost&port=5433

全部的命名参数必须匹配第 32.1.2 节中列出的关键词,除了与JDBC连接URI兼容之外,ssl=true的实例转换到sslmode=require

可以在 URI 的任意部分使用百分号编码来包含具有特殊含义的符号。

主机部分可能是主机名或一个 IP 地址。要指定一个 IPv6 地址,将它封闭在方括号中:

postgresql://[2001:db8::1234]/database

主机组件会被按照参数host对应的描述来解释。 特别地,如果主机部分是空或看起来像一个绝对路径名称,将使用一个 Unix 域套接字连接,否则将启动一个 TCP/IP 连接。 不过要注意,斜线是 URI 层次部分中的一个保留字符。 因此,要指定一个非标准的 Unix 域套接字目录,要么省略 URI 中的主机部分并且指定该主机为一个命名参数,要么在 URI 的主机部分用百分号编码路径:

postgresql:///dbname?host=/var/lib/postgresql
postgresql://%2Fvar%2Flib%2Fpostgresql/dbname

32.1.2. 参数关键词 #

当前识别的参数关键字如下:

host #

要连接的主机名。如果主机名以斜杠开头,则指定的是 Unix 域通信,而非 TCP/IP 通信;此值是存放套接字文件的目录名。当未指定 host 或其值为空时,默认连接到 /tmp(或构建 PostgreSQL 时指定的套接字目录)中的 Unix 域套接字。在没有 Unix 域套接字的机器上,默认连接到 localhost

hostaddr #

要连接的主机的数字 IP 地址。应采用标准的 IPv4 地址格式,例如 172.28.40.9。如果机器支持 IPv6,也可以使用 IPv6 地址。只要此参数指定了非空字符串,就始终使用 TCP/IP 通信。

使用hostaddr代替host可以避免主机名查找,这对于有时间限制的应用程序可能很重要。但是,采用 GSSAPI 或 SSPI 认证方式,以及进行verify-fullSSL 证书验证时,都需要主机名。遵循以下规则:

  • 如果指定了host而没有指定hostaddr,则会发生主机名查找。

  • 如果指定了hostaddr而没有指定host, 则hostaddr的值给出服务器的网络地址。 如果认证方法需要主机名,则连接尝试将失败。

  • 如果同时指定了 hosthostaddr,则 hostaddr 的值给出服务器的网络地址。只有认证方法需要主机名时,才会将 host 的值用作主机名;否则忽略该值。

注意,以下情况很可能导致认证失败:host不是位于网络地址hostaddr的服务器名称。另外,注意在~/.pgpass中是用host而不是hostaddr来标识连接的(参见第 32.15 节)。

如果既没有主机名也没有主机地址,libpq 会使用本地 Unix 域套接字连接;在没有 Unix 域套接字的机器上,则会尝试连接到 localhost

port #

连接到服务器主机的端口号,或者Unix域连接的套接字文件名扩展。

dbname #

数据库名称。默认为与用户名相同。在某些情况下,该值会被检查是否为扩展格式; 有关更多详细信息,请参阅第 32.1.1 节

user #

建立连接所用的 PostgreSQL 用户名。默认与运行应用程序的操作系统用户名相同。

password #

服务器要求密码认证时所使用的密码。

connect_timeout #

连接时的最长等待时间,以秒为单位(写成十进制整数字符串)。 零或未指定表示无限等待。不建议使用小于2秒的超时时间。

client_encoding #

这将为此连接设置client_encoding配置参数。除了对应服务器选项接受的值外, 您还可以使用auto来从客户端的当前区域设置(Unix系统上的LC_CTYPE环境变量)确定正确的编码。

options #

指定连接开始时发送到服务器的命令行选项。例如,将其设置为-c geqo=off会把会话的geqo参数值设为off。 此字符串中的空格被视为分隔命令行参数,除非用反斜杠(\)转义;写\\表示字面上的反斜杠。 有关可用选项的详细讨论,请参阅第 19 章

application_name #

指定application_name配置参数的值。

fallback_application_name #

指定application_name配置参数的后备值。 如果没有通过连接参数或PGAPPNAME环境变量为application_name指定值, 则将使用此值。在通用实用程序中指定后备名称很有用,该程序希望设置默认应用程序名称, 但允许用户覆盖它。

keepalives #

控制是否使用客户端 TCP keepalive。默认值为 1,表示开启;如果不需要 keepalive,可以将其设为 0,表示关闭。对于通过 Unix 域套接字建立的连接,此参数会被忽略。

keepalives_idle #

控制在多久没有活动后,TCP 应向服务器发送 keepalive 消息,以秒为单位。值为零时使用系统默认值。对于通过 Unix 域套接字建立的连接,或禁用 keepalive 时,此参数会被忽略。此参数仅在支持 TCP_KEEPIDLE 或等效套接字选项的系统以及 Windows 上受支持;在其他系统上无效。

keepalives_interval #

控制未被服务器确认收到的 TCP keepalive 消息在多少秒后应被重传。值为零时使用系统默认值。对于通过 Unix 域套接字建立的连接,或禁用 keepalive 时,此参数会被忽略。此参数仅在支持 TCP_KEEPINTVL 或等效套接字选项的系统以及 Windows 上受支持;在其他系统上无效。

keepalives_count #

控制在客户端与服务器之间的连接被视为中断之前,可以丢失多少个 TCP keepalive 消息。值为零时使用系统默认值。对于通过 Unix 域套接字建立的连接,或禁用 keepalive 时,此参数会被忽略。此参数仅在支持 TCP_KEEPCNT 或等效套接字选项的系统上受支持;在其他系统上无效。

tty #

忽略此参数(以前用于指定服务器调试输出的发送位置)。

sslmode #

这个选项确定是否以及以何种优先级与服务器协商安全的SSL TCP/IP连接。有六种模式:

disable

仅尝试非SSL连接

allow

首先尝试非SSL连接;如果失败,则尝试SSL连接

prefer (默认)

首先尝试SSL连接;如果失败,则尝试非SSL连接

require

仅尝试SSL连接。如果存在根CA文件,则验证证书的方式与指定了verify-ca时相同

verify-ca

仅尝试SSL连接,并验证服务器证书是否由受信任的证书颁发机构(CA)颁发

verify-full

仅尝试SSL连接,验证服务器证书是否由受信任的CA颁发,并且请求的服务器主机名与证书中的匹配

详细了解这些选项如何工作,请参阅第 32.18 节

在 Unix 域套接字通信中,sslmode 会被忽略。 如果PostgreSQL编译时未启用 SSL 支持, 使用选项requireverify-caverify-full会导致错误,而选项allowprefer 将被接受,但libpq实际上不会尝试建立SSL 连接。

requiressl #

此选项已弃用,请改用 sslmode 设置。

如果设置为1,则需要与服务器建立SSL连接(这相当于sslmode require)。libpq将拒绝连接,如果服务器不接受 SSL连接。如果设置为0(默认值), libpq将与服务器协商连接类型(相当于sslmode prefer)。此选项仅在 PostgreSQL 编译时启用了 SSL 支持的情况下可用。

sslcompression #

如果设为 1(默认值),则会压缩通过 SSL 连接发送的数据(这要求 OpenSSL 0.9.8 或更高版本)。如果设为 0,则禁用压缩(这要求 OpenSSL 1.0.0 或更高版本)。如果建立的是非 SSL 连接,或者所用 OpenSSL 版本不支持此功能,则忽略此参数。

压缩会消耗 CPU 时间,但在网络成为瓶颈时能够提高吞吐量。如果 CPU 性能是限制因素,禁用压缩能够改善响应时间和吞吐量。

sslcert #

这个参数指定客户端SSL证书的文件名,替换默认的 ~/.postgresql/postgresql.crt。 如果没有建立SSL连接,则此参数将被忽略。

sslkey #

这个参数指定了用于客户端证书的密钥的位置。它可以指定一个文件名,该文件名将被用来替代默认的 ~/.postgresql/postgresql.key,或者它可以指定一个从外部引擎 (引擎是OpenSSL可加载模块)获取的密钥。外部引擎的指定形式应包含一个由冒号分隔的引擎名称和 一个引擎特定的密钥标识符。如果没有进行SSL连接,则此参数将被忽略。

sslrootcert #

这个参数指定一个包含SSL证书颁发机构(CA)证书的文件名。 如果文件存在,服务器的证书将被验证是否由这些机构之一签名。 默认值是~/.postgresql/root.crt

sslcrl #

此参数指定 SSL 证书吊销列表(CRL)的文件名。如果该文件存在,在验证服务器证书时,会拒绝其中列出的证书。默认值为 ~/.postgresql/root.crl

requirepeer #

这个参数指定了服务器的操作系统用户名,例如requirepeer=postgres。 在建立Unix域套接字连接时,如果设置了这个参数,客户端会在连接开始时检查服务器进程是否在指定的用户下运行; 如果不是,则连接会因错误而中止。 这个参数可用于提供类似于在TCP/IP连接上使用SSL证书的服务器认证。 (请注意,如果Unix域套接字位于/tmp或其他公共可写位置, 任何用户都可以在那里启动一个服务器监听。使用这个参数来确保您连接到由受信任用户运行的服务器。) 此选项仅在实现了peer认证方法的平台上受支持;请参见第 20.3.6 节

krbsrvname #

使用 GSSAPI 认证时所用的 Kerberos 服务名。 这必须与服务器配置中指定的Kerberos认证服务名称匹配,才能成功进行认证。 (另请参见第 20.3.3 节。)

gsslib #

用于GSSAPI认证的GSS库。 目前,除了包含GSSAPI和SSPI支持的Windows构建之外,这将被忽略。 在这种情况下,将其设置为gssapi,以使libpq使用GSSAPI库进行认证,而不是默认的SSPI。

service #

用于额外参数的服务名称。它指定了pg_service.conf中保存额外连接参数的服务名称。 这允许应用程序只指定一个服务名称,以便可以集中维护连接参数。参见第 32.16 节

提交更正

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