コンテンツにスキップ

PostgreSQLへの接続

HyperdriveはPostgreSQLおよびPostgreSQL互換のデータベース、サポートされているドライバーおよびそれらのドライバーを使用するオブジェクトリレーショナルマッパー(ORM)ライブラリをサポートしています。

Hyperdriveの作成

既存のPostgreSQLデータベースに接続するHyperdriveを作成するには、wrangler CLIまたはCloudflareダッシュボードを使用します。

wranglerを使用する場合は、--connection-stringに提供されたプレースホルダー値をデータベースの接続文字列に置き換えます:

Terminal window
# wrangler v3.11以上が必要
npx wrangler hyperdrive create my-first-hyperdrive --connection-string="postgres://user:password@database.host.example.com:5432/databasenamehere"

上記のコマンドは、HyperdriveのIDを出力します。このIDは、Workersプロジェクトのwrangler.toml設定ファイルに設定する必要があります:

# データベースドライバーが機能するために必要
compatibility_flags = [ "nodejs_compat_v2" ]
[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<your-hyperdrive-id-here>"

これにより、HyperdriveはWorker内で動的な接続文字列を生成し、既存のデータベースドライバーに渡すことができます。Hyperdriveでデータベースドライバーを設定する方法については、ドライバーの例を参照してください。

複数の人気データベースプロバイダーでHyperdriveを設定する方法については、例のドキュメントを参照してください。

サポートされているドライバー

HyperdriveはWorkersのTCPソケットサポートを使用して、データベースへのTCP接続をサポートします。以下の表は、サポートされているデータベースドライバーとHyperdriveで動作する最小バージョンを示しています:

ドライバードキュメント必要な最小バージョンメモ
Postgres.js (推奨)https://github.com/porsager/postgrespostgres@3.4.4WorkersおよびPagesの両方でサポートされています。
node-postgres - pghttps://node-postgres.com/pg@8.11.08.11.4はURL解析にバグを導入し、動作しません。8.11.5で修正されました。nodejs_compat_v2互換フラグを設定する必要があります。
Drizzlehttps://orm.drizzle.team/0.26.2^
Kyselyhttps://kysely.dev/0.26.3^

^ マークされたライブラリはnode-postgresを依存関係として使用しています。

リストに記載されていない他のドライバーやORMもサポートされている可能性があります:このリストは網羅的ではありません。

サポートされているTLS(SSL)モード

Hyperdriveは、オリジナルデータベースに接続する際に次のPostgreSQL TLS(SSL)接続モードをサポートしています:

モードサポートされている詳細
noneいいえHyperdriveは安全でないプレーンテキスト接続をサポートしていません。
preferいいえ(requireを使用)Hyperdriveは常にTLSを使用します。
requireはい(デフォルト)TLSが必要であり、サーバー証明書が検証されます(WebPKIに基づく)。
verify-ca現在ベータ版ではサポートされていませんサーバーのTLS証明書がクライアントのルートCAによって署名されていることを確認します。これにより、サーバーがクライアントが信頼する証明書を持っていることが保証されます。
verify-full現在ベータ版ではサポートされていませんverify-caと同じですが、データベースのホスト名が証明書に存在するサブジェクト代替名(SAN)と一致する必要があります。

ドライバーの例

以下の例では、次のことを示します:

  1. データベースドライバーを使用してデータベースクライアントを作成します。
  2. Hyperdrive接続文字列を渡してデータベースに接続します。
  3. Hyperdriveを介してデータベースをクエリします。

Postgres.js

以下のWorkersコードは、HyperdriveでPostgres.jsを使用する方法を示しています。

Postgres.jsドライバーをインストールします:

Terminal window
npm install postgres

新しいsqlインスタンスを作成し、Hyperdriveパラメータを渡します:

import postgres from "postgres";
export interface Env {
// wrangler.tomlで'binding'の値に別の名前を設定した場合、
// "HYPERDRIVE"を定義した変数名に置き換えてください。
HYPERDRIVE: Hyperdrive;
}
export default {
async fetch(request: Request, env: Env, ctx: ExecutionContext) {
// NOTE: 接続時に`prepare: false`が渡されると、パフォーマンスが
// 遅くなりますが、正しくサポートされます。
const sql = postgres(env.HYPERDRIVE.connectionString);
try {
// 非常にシンプルなテストクエリ
const result = await sql`select * from pg_tables`;
// クライアントをクリーンアップし、完了する前に
// Workerを終了しないようにします。
ctx.waitUntil(sql.end());
// 結果の行をJSONとして返します
return Response.json({ result: result });
} catch (e) {
console.log(e);
return Response.json({ error: e.message }, { status: 500 });
}
},
} satisfies ExportedHandler<Env>;

node-postgres / pg

node-postgresドライバーをインストールします:

Terminal window
npm install pg

wrangler.toml設定ファイルの互換性フラグに”nodejs_compat_v2”が含まれていることを確認してください:

# 他のフィールドは省略
# node-postgresが動作するために必要
compatibility_flags = [ "nodejs_compat_v2"]

新しいClientインスタンスを作成し、Hyperdriveパラメータを渡します:

import { Client } from "pg";
export interface Env {
// wrangler.tomlで'binding'の値に別の名前を設定した場合、
// "HYPERDRIVE"を定義した変数名に置き換えてください。
HYPERDRIVE: Hyperdrive;
}
export default {
async fetch(request, env, ctx): Promise<Response> {
const client = new Client({
connectionString: env.HYPERDRIVE.connectionString,
});
try {
// データベースに接続します
await client.connect();
// 非常にシンプルなテストクエリ
const result = await client.query({ text: "SELECT * FROM pg_tables" });
// クライアントをクリーンアップし、完了する前に
// Workerを終了しないようにします。
ctx.waitUntil(client.end());
// 結果の行をJSONとして返します
return Response.json({ result: result });
} catch (e) {
console.log(e);
return Response.json({ error: e.message }, { status: 500 });
}
},
} satisfies ExportedHandler<Env>;

Hyperdriveからの接続の識別

HyperdriveからPostgresデータベースサーバーへのアクティブな接続を識別するには:

  • Hyperdriveのデータベースへの接続は、pg_stat_activityテーブルのapplication_nameCloudflare Hyperdriveとして表示されます。
  • SELECT DISTINCT usename, application_name FROM pg_stat_activity WHERE application_name = 'Cloudflare Hyperdrive'を実行して、Hyperdriveが現在データベースに接続を保持しているかどうかを確認します。

次のステップ