连接字符串
Kisenon 端点的格式、TLS、角色和密码规则。
每个 Kisenon 端点都暴露一个标准的 postgresql:// URI:
postgresql://<role>:<pwd>@<endpoint_id>.<region>.kisenon.com:5432/<database>?sslmode=require组成部分
| 字段 | 含义 |
|---|---|
<role> | 在分支上创建的 Postgres 角色。端点卡片会显示自动创建的 app 角色;你可以通过 SQL 创建更多。 |
<pwd> | 该角色的密码。在创建时显示一次;通过 SQL 轮换。 |
<endpoint_id> | 每个端点稳定不变,例如 5e0c7d1a-8b2f-4e36-9a41-c7d2e8f03b15。通过 SNI 路由。 |
<region> | 你项目的区域标识 —— 目前为 usc1(美国中部,GCP)。派生得出,非硬编码;参见 区域。 |
kisenon.com | 数据平面顶点。通过 TLS SNI 路由到你的端点。 |
5432 | 标准 Postgres 端口。 |
<database> | 默认为 main;使用 CREATE DATABASE 创建更多。 |
?sslmode=require | TLS 是强制的。require 会加密,但在该模式下大多数驱动不会检查服务器证书——参见验证服务器证书。 |
TLS
端点使用面向 *.<region>.kisenon.com 的 Let's Encrypt 证书终止 TLS,
因此无需自定义 CA。
Kisenon 提供的连接字符串——控制台的 Connection string 格式、
keon connection-string 以及 API——使用 sslmode=require。连接是加密的,
但在 require 下大多数驱动不会检查服务器证书。它仍是默认值,因为这是所有
驱动都接受的唯一取值。
验证服务器证书
要让驱动同时检查证书链以及主机名,请使用对应驱动的参数。控制台中按驱动 区分的格式已经这样做了。
| 驱动 | 参数 |
|---|---|
psql 及其他 libpq 工具(libpq 16+) | sslmode=verify-full&sslrootcert=system |
| Python:psycopg 3、psycopg2、SQLAlchemy、Django | sslmode=verify-full&sslrootcert=system(参见下方的二进制 wheel) |
Node.js:pg、Drizzle、postgres.js | sslmode=verify-full |
| Prisma 6 和 7 | sslmode=verify-full&sslaccept=strict |
| Go:pgx v5.7.0+、lib/pq v1.12.0+ | sslmode=verify-full&sslrootcert=system |
| Go:更早版本的 pgx 或 lib/pq | sslmode=verify-full |
| Java:JDBC、Spring | sslmode=verify-full&sslfactory=org.postgresql.ssl.DefaultJavaSSLFactory |
| .NET:Npgsql、EF Core | SSL Mode=VerifyFull |
@kisenon/serverless | 无需添加:它通过 HTTPS/WebSocket 连接,并忽略 sslmode。 |
常见的坑:
- 低于 16 的 libpq 不理解
sslrootcert=system。此时请有意地退回到sslmode=require:加密,但不验证。 - 切勿把
sslrootcert=system传给 Node.js 驱动。pg(以及使用它的 Prisma 7)会尝试读取名为system的文件并失败;postgres.js 会把它发给 服务器,服务器会拒绝该连接。 - Python 二进制 wheel(
psycopg[binary]、psycopg2-binary)自带 OpenSSL,其系统信任库是空的,因此sslrootcert=system会以certificate verify failed失败。请用SSL_CERT_FILE指向操作系统的 证书包——在 Debian/Ubuntu 上为SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt。其他系统上的路径不同。 - Windows 没有 PEM 格式的信任库,因此在所有基于 libpq 的客户端(
psql、 psycopg、Ruby 的pggem)中,sslrootcert=system都会以certificate verify failed失败。请改为给sslrootcert指定 CA 证书包文件。 Python 中使用 certifi:pip install certifi,然后sslrootcert=certifi.where()(适用于所有操作系统,所以控制台的 Python 格式使用它)。psql或 Rails 请从https://curl.se/ca/cacert.pem下载 Mozilla 证书包并传入其路径:sslrootcert=C:\certs\cacert.pem。 - Prisma 6 除非设置了
sslaccept=strict,否则无论sslmode为何值都 不会检查证书。 - postgres.js 在
sslmode=require下不会检查证书。 - JDBC 仅使用
sslmode=verify-full时会查找~/.postgresql/root.crt;sslfactory=org.postgresql.ssl.DefaultJavaSSLFactory会让它改用 JVM 信任库。
代理如何路由到你的端点
数据平面代理按顺序依据两个信号来判定一个连接属于哪个端点:
neon.endpoint_id启动选项,如果客户端发送了它。- 作为回退的 TLS SNI 主机名(
<endpoint_id>.<region>.kisenon.com)。
用户名字段不用于路由 —— 可选用你分支所定义的任意角色。 由控制台生成的连接字符串会在主机名中携带端点, 因此它们会自动通过 SNI 路由,你无需设置任何额外内容。
只有当你的客户端无法在 SNI 中出示端点时才显式传入
neon.endpoint_id —— 例如一个不会发送 Server
Name 扩展的 TLS 栈,或一个重写主机的隧道。大多数 Postgres
驱动默认发送 SNI,所以这很少需要。
连接池
连接池已GA 并默认开启 —— 每个端点在其直连主机之外 都有一个池化主机(自 2026-07-18 起)。
池化主机是 <endpoint_id>-pooler.<region>.kisenon.com —— 同一个
端点,只是在主机标签中插入了 -pooler —— 位于端口 5432
并使用 sslmode=require:
postgresql://<role>:<pwd>@<endpoint_id>-pooler.<region>.kisenon.com:5432/<database>?sslmode=require控制台的 Connect 面板和 API 响应都会在直连的 connection_uri
之外交给你一个 connection_uri_pooled。
池化器以 事务池化 模式运行(每个计算一个 PgBouncer 边车)。 这非常适合大量短生命周期的连接 —— 无服务器函数、 边缘运行时、智能体 —— 其中每个事务可以借用一个 服务器连接并立即归还。
当你需要以下内容时,改用直连(未池化的 :5432)连接:
LISTEN/NOTIFY。- 会话级咨询锁。
- 必须超越单个事务生命周期的会话
SET/ GUC。 - 服务器端预处理语句。
直连的 connection_uri 始终可用且永不移除,因此
这些功能会与以前完全一样地继续工作。在直连之前放置一个
客户端侧连接池(PgBouncer 或你驱动内置的连接池)同样有效。
在创建时通过 pooler_enabled: false 字段,或通过
PATCH /v1/endpoints/{endpointId},可让一个端点退出池化。默认值为
true。
多个端点
你可以在同一个分支上派生多个端点。它们共享存储 但拥有独立的连接限制和缓存。用它们来隔离:
- 应用流量与分析流量。
- 只读副本(如果你不写入,分支上的任何端点本质上都是一个只读 副本)。
- 开发分支上的按环境端点。