Bun.sql,因此无需另行安装驱动程序。
在本指南中,您将通过经过验证的 TLS 连接将 Bun 连接到 ClickHouse Managed Postgres,创建一张表,执行查询和事务,并使用 Bun.serve 通过 HTTP 对外提供这些行数据。
前置条件
- Bun 1.4 或更高版本。本指南已使用 Bun 1.4.2 和 Postgres 18 测试通过。
- 一个 ClickHouse Cloud 账户。
psql,用于创建数据库。也可以在 SQL 控制台中运行CREATE DATABASE语句。
创建 ClickHouse Managed Postgres 服务
在 ClickHouse Cloud 控制台中,点击 New service,然后选择 Postgres。实例会在几分钟内就绪。完整的操作演示请参阅快速入门。获取连接详细信息
打开你的服务,在左侧边栏中点击 Connect。保持选中 Directly,并开启 Use SSL。此时 URL 将以sslmode=verify-full&sslrootcert=... 结尾。点击 Download CA certificate,下载该实例的 CA 证书。
本指南通过端口 5432 直接连接。Bun.serve 应用是长时间运行的进程,而 Bun.sql 自带连接池,因此无需使用服务器端连接池器。如果你需要运行大量短时存活的 Bun 进程,请参阅通过 PgBouncer 连接。
设置项目
创建项目:配置连接
将下载的 CA 证书移动到项目目录中,并重命名为ca-certificate.pem:
<PASSWORD> 和主机地址替换为 Connect 对话框中显示的值:
guide_bun 数据库的连接 URL 添加到 .env 文件中 (如果该文件不存在,请先创建) 。Bun 会自动加载 .env,而从 bun 导出的 sql 会读取 DATABASE_URL:
.env
.env 提交到版本控制中。
将以下脚本添加到 package.json 中;如果已存在 scripts 块,请将其合并到该块中。这些脚本会通过 NODE_EXTRA_CA_CERTS 将 CA 证书传递给 Bun:
package.json
Bun 如何验证服务器证书
sslmode=verify-full会让Bun.sql同时校验证书链和主机名。- 不要从控制台 URL 中复制
sslrootcert参数。Bun.sql不会读取该参数,而是将其作为运行时设置转发给服务器,导致连接失败并报错unrecognized configuration parameter "sslrootcert"。 NODE_EXTRA_CA_CERTS必须在 Bun 启动时就已存在于环境变量中。Bun 不会从.env中读取该变量,因此才将其写在脚本中。- 在 Bun 1.4.2 中,通过
SQL的tls: { ca }选项传入下载的证书会失败,并报错certificate signature failure。请改用NODE_EXTRA_CA_CERTS。
创建表
创建setup.ts 文件。该脚本会输出当前会话的 TLS 状态,并创建 todos 表:
setup.ts
查询数据库
Bun.sql 使用标签模板 (tagged templates) 。所有插值都会作为绑定参数发送,因此可以放心传入用户输入。创建 queries.ts:
queries.ts
sql.begin 会在事务中执行回调函数:回调函数正常返回时提交事务,抛出异常时则回滚。
运行:
通过 HTTP 提供行数据
创建server.ts,并在其中添加一个 /todos 端点,用于列出和创建行:
server.ts
验证
在浏览器中打开 http://localhost:3106/todos,即可查看所有行。返回结果如下 (已格式化以便阅读) :通过 PgBouncer 连接
如果您需要运行大量短生命周期的 Bun 进程,请改为通过内置的 PgBouncer 进行连接。在 Connect 对话框中选择 via PgBouncer,并将DATABASE_URL 中的端口改为 6432。CA 证书和 sslmode=verify-full 无需更改。
PgBouncer 以事务级连接池模式运行。Bun.sql 默认使用命名预处理语句,在我们的测试中,通过 PgBouncer 使用时未出现任何错误。如果遇到 prepared statement does not exist 错误,请在创建客户端时指定 prepare: false:
prepare 作为选项传入,不要写在 URL 中。与 sslrootcert 一样,URL 参数 prepare=false 会被转发到服务器,并被服务器拒绝。
后续步骤
- 连接:连接字符串、PgBouncer 和 TLS
- 设置:修改 Postgres 和 PgBouncer 参数
- 只读副本:扩展读取能力
- Bun SQL 文档:完整的
Bun.sqlAPI 参考