连接参数参考
常用连接参数
Go驱动的常用连接参数,如表1所示。
| 参数名称 | 参数说明 |
|---|---|
| host | 主机IP地址,默认值为localhost。也可通过环境变量PGHOST来指定。 |
| port | 主机服务器的端口号,默认值为5432。也可通过环境变量PGPORT来指定。 |
| dbname | 数据库名,也可通过环境变量PGDATABASE来指定。 |
| user | 用户名,也可通过环境变量PGUSER来指定。 |
| password | 密码。 |
| 指定连接服务器操作的超时时间,也可通过环境变量PGCONNECT_TIMEOUT来指定。默认值为0,表示没有超时。 | |
| sslmode | 启用SSL加密的方式,也可通过环境变量PGSSLMODE来指定。默认值为prefer。 参数取值范围:
|
| sslkey | SSL连接时,指定客户端密钥路径。也可通过设置环境变量PGSSLKEY来指定。 |
| sslcert | SSL连接时,指定客户端证书路径。也可通过设置环境变量PGSSLCERT来指定。 |
| sslrootcert | SSL连接时,指定根证书路径。也可通过设置环境变量PGSSLROOTCERT来指定。 |
| sslcrl | 指定SSL证书吊销列表(CRL,Certificate Revocation List)的文件路径。也可通过设置环境变量PGSSLCRL来指定。若服务端证书存在于已配置的CRL中,客户端在SSL握手阶段将拒绝认证并终止连接。 |
| sslpassword | 指定解密SSL密钥文件的密码短语。启用此参数时,表明sslkey文件是通过加密方式存储的,当前sslkey支持DES/AES加密方式。 说明: DES加密算法安全性低,存在安全风险,建议使用更安全的加密算法。 |
| disable_prepared_binary_result | 表示此连接在从预准备语句接收查询结果时,是否使用二进制格式。该参数为字符串类型,仅用于调试。默认值为no。 取值范围:
|
| binary_parameters | 表示连接期间是否以二进制形式发送[]byte。该参数属于字符串类型。默认值为no。 取值范围:
|
| target_session_attrs | 指定数据库的连接类型,该参数用于识别主备节点,也可通过环境变量PGTARGETSESSIONATTRS来指定。默认值为any,该参数共有六种取值:any、master、slave、preferSlave、read-write、read-only。
|
| loggerLevel | 指定日志级别,打印相关日志信息,也可通过环境变量PGLOGGERLEVEL来指定。 支持trace、debug、info、warn、error、none,级别从高到低。默认值为error。 说明: 日志或报错信息中若含有安全相关的关键字(PASSWORD、GS_ENCRYPT、IDENTIFIED等),Go驱动会使用******代替相关信息。 |
| application_name | 标识连接到数据库的应用程序名称。默认值为go-driver,该参数不建议用户配置。 |
| 设置连接会话时默认运行的USERSET类型GUC参数的值。例如参数search_path、application_name、statement_timeout等,可以在连接字符串中进行配置。 | |
| autoBalance | 分布式环境下,指定负载均衡的策略,为字符串类型。默认值为false,参数取值共有六种:true、balance、roundrobin、shuffle、priorityn、false。
|
| recheckTime | 表示定期检测数据库集群中CN状态,获取可用CN的IP列表的时间间隔。该参数为integer类型,单位为s,取值范围为5 ~ 60,默认为10s。 |
| usingEip | 指定是否使用业务IP实现负载均衡。该参数为字符串类型,默认值为yes。
|
| tcp_syn_retries | 设置TCP连接建立阶段的最大重试次数。若未配置此参数,系统将采用设备默认的重试次数。建议通过以下公式确保合理配置:重试次数 × 单次重试间隔 < connect_timeout。 说明: 单次重试间隔为系统底层实现值,通常无需手动配置。 |
| socketTimeout | 设置读写超时时间,如果业务语句执行或者从网络读取数据流超过该值,连接中断。 说明: 该参数限制单条SQL语句最长的执行时间,单语句执行超过该值则会中断重连。建议根据业务特征进行配置,如果未配置,默认为0,即不会超时。 |
| timeZone | 设置该参数后,建连时将数据库GUC参数TimeZone设为该参数值,查询不带时区的timestamp/date数据时,返回结果会自动补充GUC参数TimeZone指定的时区。该参数属于字符串类型。 取值范围:与数据库GUC参数TimeZone的取值范围一致。GUC参数TimeZone的取值范围,请参见《参考》中“数据库运行参数说明 > GUC参数说明 > 客户端连接缺省设置 > 区域和格式化”。 |
连接参数配置值的生效优先级
Go驱动可以通过以下方式获取连接参数配置值,分别为:
- DSN/URL连接串(显式指定)
- 环境变量[PGXX](部分参数可通过环境变量来指定,详见表1)
- 默认值
连接参数配置值的生效优先级:DSN/URL连接串 > 环境变量[PGXX] > 默认值。以配置连接参数中的端口号为例:
- 创建数据库连接对象时,端口号优先从DSN或URL连接串获取port参数的配置值。若连接串有配置port参数,则以该配置值作为端口号创建数据库连接对象。
- 若连接串没有配置port参数,则Go驱动会进一步检查是否配置环境变量PGPORT。若环境变量PGPORT对应值不为空,则以该配置值作为端口号创建数据库连接对象。
- 若连接串和环境变量都没有配置,则以默认值5432作为端口号创建数据库连接对象。
建立连接的首包介绍
驱动与数据库建立连接过程中,Socket(套接字)建立之后,由驱动以key value形式向数据库发送的第一个报文为首包。首包内容包括用户名(user)、数据库名(database)以及部分GUC参数信息(enable_full_encryption、application_name、RuntimeParams)。其中RuntimeParams指代数据库支持的USERSET类型GUC参数,而非参数名,具体介绍可以参考RuntimeParams。GUC参数的具体介绍,请参见《参考》中“数据库运行参数说明 > GUC参数说明”。
reset all;
