サーバーレス / エッジドライバー
未改変の @neondatabase/serverless ドライバーを HTTP と WebSocket 経由で Kisenon に対して使用します。
エッジおよびサーバーレスランタイム(Cloudflare Workers、Vercel Edge、Deno) は生の TCP ソケットを開けないため、Postgres ワイヤープロトコルを直接 話すことができません。Kisenon エンドポイントはこれに対し、Neon サーバーレス ドライバーとワイヤー互換の HTTP + WebSocket SQL ゲートウェイで応えます。
要点
正確に、未改変の @neondatabase/serverless
npm パッケージをそのまま使用します。Kisenon ブランドのパッケージもフォークも
存在せず、設定する neonConfig のオーバーライドもありません。標準的な Neon の
セットアップからの唯一の変更は接続ホストです。DATABASE_URL を
Kisenon エンドポイントに向けてください:
postgres://<user>:<password>@<eid>.<region>.kisenon.com/<db>これは通常の Postgres 接続文字列と同じホストです。別のサーバーレス用
ホスト名はありません。コンソールのエンドポイントカードから、または
keon endpoints connection-string <eid> で取得します。
インストール
npm i @neondatabase/serverlessneon() による HTTP クエリ
neon() タグ付きテンプレートクライアントは、各クエリをエンドポイントの
/sql ルートへの単一の HTTPS POST として送信します。Web 標準の fetch 上で
動作するため、Node の net モジュールがないエッジランタイムでも安全です。
Worker や Edge Function での一発のクエリに最適です:
import { neon } from "@neondatabase/serverless";
export default {
async fetch(request, env) {
const sql = neon(env.DATABASE_URL);
const [row] = await sql`SELECT 1 AS n`;
return Response.json({ n: row.n });
},
};パラメーター化クエリはタグを通じて補間されるため、
sql`SELECT * FROM users WHERE id = ${id}` は文字列連結ではなく
バインドされたパラメーターとして送信されます。
Pool / Client によるセッションとトランザクション
複数ステートメントのセッション、対話型トランザクション、または長寿命の
接続が必要な場合は、Pool(または Client)を使用します。これらは Postgres
ワイヤープロトコルをエンドポイントの /v2 ルートへの WebSocket 経由で
トンネルします — WS パスは自動的に選択され、設定は不要です:
import { Pool } from "@neondatabase/serverless";
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
const { rows } = await pool.query("SELECT 1");pg スタイルの完全な API が動作します: pool.connect()、
client.query('BEGIN')、プリペアドステートメントなど、すべてが単一の
WebSocket 上で動作します。
仕組み
2 つのトランスポートがリージョナルデータプレーンで終端します:
- HTTP —
neon()はNeon-Connection-Stringヘッダー付きでhttps://<eid>.<region>.kisenon.com/sqlへPOSTします。ゲートウェイは クエリを実行し、Neon のレスポンスエンベロープ(command、rowCount、fields、rows)を返します。フロントドア形式のhttps://api.<region>.kisenon.com/sqlもあり、そこではエンドポイントが ホストラベルではなくNeon-Connection-Stringヘッダー内の接続文字列から 取得されます —apiは予約されたフロントドアラベルであり、エンドポイント id ではありません。 - WebSocket —
Pool/Clientはwss://<eid>.<region>.kisenon.com/v2を アップグレードし、ゲートウェイが生の Postgres ワイヤープロトコル(起動、 認証、クエリ、行データ)をソケット越しに透過的にブリッジします。標準ドライバー のデフォルトのパイプライン化平文認証はシムによって処理されるため、その md5/SCRAM の計算は未改変で動作します。
どちらも TCP の postgres:// 文字列が到達するのと同じエンドポイントに着地する
ため、ブランチのデータ、ロール、TLS 証明書を共有します。
エッジドライバーは md5 と scram-sha-256 の両方で認証します — コンピュート ロールはデフォルトで md5 パスワード暗号化を使用し、新しいロールは scram を使用します — そしてゲートウェイが両方を透過的に処理するため、ロールがどちらを使うかを設定する ことはありません。
制限と注意事項
- 直接またはプール化。 ドライバーは直接ホストとプール化された
<eid>-pooler.<region>.kisenon.comホスト(トランザクションモード)の両方で 動作します — プーリングは GA でデフォルトオンです。サーバーレスドライバーの 短命な接続には、プール化ホストが自然に適しています。プール化と直接については 接続文字列 を参照してください。 - ゼロからのウェイク。 サスペンド中のエンドポイントは最初のリクエストで起動
します。コールドなエンドポイントへの HTTP クエリは、一時的に
503を{"code":"endpoint_waking"}とRetry-Afterヘッダー付きで返すことが あります。ドライバーは該当する場合 HTTP リクエストを透過的に再試行し、 保留された WebSocket アップグレードはエンドポイントがウォームになると完了 します。アイドル後の最初のリクエストは少し時間がかかると考えてください。 - TLS は必須。 ゲートウェイはパブリックトラストストアからの
*.<region>.kisenon.com証明書を提供します — カスタム CA は不要です。