跳转到主要内容

连接设置

如需查看每个选项的完整说明,包括默认值、DSN 参数、最佳实践和故障排查,请参阅配置参考
打开连接时,可以使用 Options 结构体来控制客户端行为。可用设置如下:
完整示例

TLS

在底层,所有客户端连接方法 (DSN/OpenDB/Open) 都会使用 Go tls package 建立安全连接。如果 Options 结构体中包含一个非空的 tls.Config 指针,客户端就会识别并使用 TLS。
完整示例 这个最小化的 TLS.Config 通常足以连接到 ClickHouse server 的安全 native 端口 (通常为 9440) 。如果 ClickHouse server 没有有效的证书 (例如证书已过期、hostname 不匹配,或不是由公开认可的根证书颁发机构签发) ,则可以将 InsecureSkipVerify 设为 true,但强烈不建议这样做。
完整示例 如果需要额外的 TLS 参数,应用程序代码应在 tls.Config 结构体中设置相应字段。其中可以包括指定特定的密码套件、强制使用某个 TLS 版本 (如 1.2 或 1.3) 、添加内部 CA 证书链,以及在 ClickHouse server 要求时添加客户端证书 (及其私钥) ,还包括更专门的安全配置中的大多数其他选项。

身份验证

在连接详细信息中指定 Auth 结构体,以提供用户名和密码。
完整示例

连接到多个节点

可通过 Addr 结构体指定多个地址。
完整示例 提供三种连接策略:
  • ConnOpenInOrder (默认) - 按顺序使用地址。只有当无法使用列表中靠前的地址建立连接时,才会使用后面的地址。本质上,这是一种故障转移策略。
  • ConnOpenRoundRobin - 通过轮询策略在各个地址之间均衡负载。
  • ConnOpenRandom - 从地址列表中随机选择一个节点。
可通过 ConnOpenStrategy 选项进行控制
完整示例

连接池

客户端会维护一个连接池,并按需在不同查询之间复用连接。任意时刻最多使用 MaxOpenConns 个连接,而连接池的最大空闲连接数由 MaxIdleConns 控制。客户端每次执行查询时都会从连接池获取一个连接,并在使用后将其归还以供复用。连接会在整个批次的生命周期内持续占用,并在调用 Send() 时释放。 除非用户设置 MaxOpenConns=1,否则无法保证后续查询会继续使用连接池中的同一个连接。这种需求并不常见,但在使用临时表时可能是必需的。 另外请注意,ConnMaxLifetime 默认值为 1 小时。如果有节点离开集群,这可能导致发往 ClickHouse 的负载分布不均。例如,当某个节点不可用时,连接会被分配到其他节点。即使该节点随后恢复并重新加入集群,这些连接默认也会继续保持,并且在 1 小时内不会重新建立。在高负载场景下,建议适当调低该值。 Native (TCP) 和 HTTP 协议均启用了连接池。

日志

该客户端支持通过 Options 中的 Logger 字段,使用 Go 标准 log/slog 包进行结构化日志记录。旧版的 DebugDebugf 字段已弃用,但为保持向后兼容性仍然可用 (优先级:Debugf > Logger > 空操作) 。
你还可以为日志记录器添加应用级上下文:
完整示例

压缩

对压缩方法的支持取决于所使用的底层协议。对于原生协议,客户端支持 LZ4ZSTD 压缩。这仅在块级别进行。可通过在连接配置中加入 Compression 配置来启用压缩。
完整示例 使用 HTTP 传输时,还可使用其他压缩方式:gzipdeflatebr。详情请参见 Database/SQL API - 压缩

TCP 与 HTTP

传输方式只需切换一个配置项——本指南中的其余内容对两者都适用。区别如下: 要将任一 API 切换到 HTTP:
最后修改于 2026年7月2日