kisenon

サーバーレス / エッジドライバー

未改変の @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>.usc1.kisenon.com/<db>

これは通常の Postgres 接続文字列と同じホストです。別のサーバーレス用 ホスト名はありません。コンソールのエンドポイントカードから、または keon endpoints connection-string <eid> で取得します。

インストール

npm i @neondatabase/serverless

neon() による 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 つのトランスポートがリージョナルデータプレーンで終端します:

  • HTTPneon()Neon-Connection-String ヘッダー付きで https://<eid>.usc1.kisenon.com/sqlPOST します。ゲートウェイは クエリを実行し、Neon のレスポンスエンベロープ(commandrowCountfieldsrows)を返します。
  • WebSocketPool/Clientwss://<eid>.usc1.kisenon.com/v2 を アップグレードし、ゲートウェイが生の Postgres ワイヤープロトコル(起動、 SCRAM 認証、クエリ、行データ)をソケット越しにブリッジします。

どちらも TCP の postgres:// 文字列が到達するのと同じエンドポイントに着地する ため、ブランチのデータ、ロール、TLS 証明書を共有します。

制限と注意事項

  • 現時点ではプール未対応。 各エンドポイントには直接到達します。プール化 された -pooler ホストルーティングはまだ出荷されていません。単一の アイソレート内での接続再利用にはドライバー自身の Pool を使用してください。
  • ゼロからのウェイク。 停止中のエンドポイントは最初のリクエストで起動 します。コールドなエンドポイントへの HTTP クエリは、一時的に 503{"code":"endpoint_waking"}Retry-After ヘッダー付きで返すことが あります。ドライバーは該当する場合 HTTP リクエストを透過的に再試行し、 保留された WebSocket アップグレードはエンドポイントがウォームになると完了 します。アイドル後の最初のリクエストは少し時間がかかると考えてください。
  • TLS は必須。 ゲートウェイはパブリックトラストストアからの *.usc1.kisenon.com 証明書を提供します。カスタム CA は不要です。