VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

PQconnectdbParams

功能描述

与数据库服务器建立一个新的连接。这个函数用从两个NULL结束的数组中来的参数打开一个新的数据库连接。keywords为一个字符串的数组,数组每项均为一个关键字。values给每个关键字一个值。

接口原型

PGconn *PQconnectdbParams(const char * const *keywords,
                          const char * const *values,
                          int expand_dbname);
参数名 参数说明
keywords 关键字数组,数组每项为一个关键字,目前可识别的关键字是:
  • host:表示要联接的主机名。如果主机名以斜杠开头, 则它声明使用 Unix 域套接字通讯而不是 TCP/IP 通讯;该值就是套接字文件所存储的目录。 如果没有声明host,那么缺省时是与位于/tmp目录里面的 Unix-域套接字连接。 在没有 Unix 域套接字的机器上,缺省是与localhost连接。
  • hostaddr:主机的 IP 地址。
  • port:主机服务器的端口号,或者在 Unix 域套接字联接时的套接字扩展文件名。
  • dbname:数据库名。缺省和用户名相同。在某些情况下,为扩展的格式检查值。
  • user:连接数据库的用户名,缺省是与运行该应用的操作系统用户名同名的用户。
  • password:如果服务器要求口令认证,所用的口令。
  • connect_timeout:连接最大等待时间,以秒计(用十进制整数字串书写)。零或者不声明表示无穷,不建议把连接超时的值设置得小于 2 秒。
  • client_encoding:为当前连接设置client_encoding配置参数。 除了对应的服务器选项接受的值,也可以使用auto 从客户端中的当前环境中确定正确的编码(Unix系统上是 LC_CTYPE环境变量)。
  • options:添加命令行选项以在运行时发送到服务器。
  • application_name为application_name配置参数指定一个值。
  • fallback_application_name为application_name配置参数指定一个回退值。 若没有通过连接参数或PGAPPNAME环境变量给定 application_name值,则使用此值。 在想要设置缺省应用名但是允许用户重写的通用实用程序中指定一个回退名是意义的。
  • keepalives:控制客户端侧的TCP保持激活是否使用。1为打开,0为关闭,缺省值是1。通过Unix域套接字做的连接忽略该参数。
  • keepalives_idle:在TCP应该发送一个保持激活的信息给服务器之后,控制不活动的秒数。 0值表示使用系统缺省。通过Unix域套接字连接或禁用了保持激活则忽略该参数。 只有在TCP_KEEPIDLE和TCP_KEEPALIVE套接字选项可用的系统上支持该参数。
  • keepalives_interval:在TCP保持激活信息没有被服务器承认之后,控制秒数。0值表示使用系统缺省。 通过Unix域套接字连接或者禁用了保持激活则忽略该参数。 只有在TCP_KEEPINTVL套接字选项可用的系统上支持该参数。
  • keepalives_count:在认为客户端到服务器的连接结束之前,控制可以丢失的TCP保持激活的数量。0值表示使用系统缺省。 通过Unix域套接字连接或者禁用了保持激活则忽略该参数。 只有在TCP_KEEPINTVL套接字选项可用的系统上支持该参数。
  • tty:忽略(以前此选项用于声明服务器日志的输出方向)。
  • sslmode:这个选项决定是否需要和服务器协商一个SSL TCP/IP连接, 以及以什么样的安全优先级与服务器进行SSL TCP/IP连接。这里有六个模式:
    A. disable:只进行一个非SSL连接
    B. allow:首先尝试一个非SSL连接;如果失败,尝试一个SSL连接
    C. prefer (default):首先尝试SSL连接;如果失败,尝试一个非SSL连接
    D. require:尝试一个SSL连接。如果有根CA文件,则按照指定了verify-ca 的相同方式验证该证书
    E. verify-ca:只尝试一个SSL连接,并核实服务器证书是由一个受信任的认证中心(CA)发布的
    F. verify-full:只尝试一个SSL连接,核实服务器证书是由受信任的CA发布的, 并且该服务器主机名匹配证书中的服务器主机名。
  • sslcompression:如果设置为1(缺省),通过SSL连接进行的数据发送将被压缩(要求OpenSSL版本不低于0.9.8)。如果设置为0,将禁用压缩(要求OpenSSL 版本不低于1.0.0)。 若未使用SSL连接,或者如果使用的OpenSSL版本不满足要求,则忽略该参数。由于压缩会占用CPU时间,当网络是瓶颈时,则可以提高吞吐量。 但若CPU性能是瓶颈,那么禁用压缩反而可以提高响应时间和吞吐量。
  • sslcert:这个参数指定客户端SSL认证的文件名,替换缺省值。 如果没有做SSL连接,则忽略这个参数。
  • sslkey:这个参数指定客户端使用的秘钥的位置,或者指定一个从外部 “引擎”获取的键(引擎是OpenSSL可加载模块)。 一个外部引擎声明应该包括一个由冒号分隔的引擎名字和特定于引擎的键标识符。 如果不是SSL连接则忽略此参数。
  • sslrootcert:这个参数声明一个包含SSL认证授权(CA)证书的文件名。 如果该文件存在,那么将要验证的服务器的证书将由这些授权之一签署。
  • sslcrl:这个参数声明SSL证书撤销列表(CRL)的文件名。在这个文件中列出的证书, 如果该文件存在,将在尝试认证服务器的证书时被拒绝。
  • requirepeer:这个参数声明服务器的操作系统用户名。 当建立一个Unix域套接字连接时,如果设置了该参数,那么在连接的开始, 客户端检查服务器进程是否运行在指定的用户名之下;如果不是,则连接带有错误退出。 这个参数可以用来提供服务器认证,类似于在TCP/IP连接上可用SSL证书。 (请注意,如果Unix域套接字在/tmp中或另一个公开可写位置, 那么任意用户都可以在这里启动一个服务器监听。 使用这个参数确保你连接到一个受信任的用户运行的服务器。) 这个选项只有在实现了peer认证方法的平台上支持。
  • krbsrvname:使用Kerberos 5或GSSAPI认证时使用的Kerberos服务名。 这个名字必须和服务器给Kerberos认证配置的服务名相同,才能认证成功。
  • gsslib:为GSSAPI认证使用的GSS库。只在Windows上使用。设置为gssapi 强制libpq使用GSSAPI库而不是缺省的SSPI。
  • service:用于额外参数的服务名。它在pg_service.conf里面声明一个服务名, 这个配置文件保存额外的连接参数。这样就允许应用只声明一个服务名, 而连接参数就可以在一个地方维护了。
  • values 指定keywords数组中每个关键字所对应的值。
    expand_dbname 当expand_dbname是非零的时,允许将dbname 的关键字值看做一个连接字符串。连接字符串的规则分为两类:l
  • key-value
    每个参数以keyword = value的形式设置。等号周围的空格是可选的。要写一个空值或者一个包含空白的值,可以用一对单引号包围它们, 例如,keyword = 'a value'。数值内部的单引号和反斜杠必须用一个反斜杠转义, 比如,\'或\\。
  • 连接URI
    连接URI的通用格式:
    postgresql://[user[:password]@][netloc][:port][/dbname][?param1=value1&…]
    例如:
    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
    在使用过程中还需注意一下内容:
  • 百分号可以用在URI的任何部分来包含特殊含义的符号。
  • 忽略任何不对应于前述(见keywords参数介绍)关键字的连接参数, 并将关于它们的警告消息发送到stderr。
  • 为了提高JDBC连接URI的兼容性,参数ssl=true 的实例被翻译成sslmode=require。
  • l 主机部分是主机名或者IP地址。要指定一个IPv6主机地址,将它包含在方括号中。postgresql://[2001:db8::1234]/database
  • 如果主机部分为空或者以斜线开头,那么选择一个Unix域套接字连接,否则初始化一个TCP/IP连接。不过要注意,斜线是URI分层部分的一个保留字符。所以,要指定一个非标准Unix域套接字路径, 要么在URI中省略主机声明并指定主机为一个参数,要么在URI的主机部分添加百分号:postgresql:///dbname?host=/var/lib/postgresqlpostgresql://%2Fvar%2Flib%2Fpostgresql/dbname