仙kisenon

连接字符串

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=requireTLS 是强制的。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、Djangosslmode=verify-full&sslrootcert=system(参见下方的二进制 wheel)
Node.js:pg、Drizzle、postgres.jssslmode=verify-full
Prisma 6 和 7sslmode=verify-full&sslaccept=strict
Go:pgx v5.7.0+、lib/pq v1.12.0+sslmode=verify-full&sslrootcert=system
Go:更早版本的 pgx 或 lib/pqsslmode=verify-full
Java:JDBC、Springsslmode=verify-full&sslfactory=org.postgresql.ssl.DefaultJavaSSLFactory
.NET:Npgsql、EF CoreSSL 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 的 pg gem)中,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 信任库。

代理如何路由到你的端点

数据平面代理按顺序依据两个信号来判定一个连接属于哪个端点:

  1. neon.endpoint_id 启动选项,如果客户端发送了它。
  2. 作为回退的 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。

多个端点

你可以在同一个分支上派生多个端点。它们共享存储 但拥有独立的连接限制和缓存。用它们来隔离:

  • 应用流量与分析流量。
  • 只读副本(如果你不写入,分支上的任何端点本质上都是一个只读 副本)。
  • 开发分支上的按环境端点。
连接字符串 · Kisenon