メインコンテンツまでスキップ

接続

Supabaseは、Postgresデータベースへの接続にいくつかの選択肢を用意しています。

接続の種類

  • APIを使用したHTTP接続
  • Postgresの標準的な接続システムを使用したダイレクト接続
  • PgBouncerを用いた接続プーリング

ダイレクト接続と接続プーリング

  • APIは自動生成されたRESTインターフェイスです。ブラウザやアプリケーションとのやりとりは、すべてこれを使う必要があります。
  • 「ダイレクト接続」とは、Postgresのネイティブな接続実装を使用してデータベースへ接続することです。
  • 「接続プール」とは、Postgresのネイティブなシステムではなく、接続を管理するシステム(Postgresの外部)のことです。

なぜ接続プールを使用するのでしょうか。主に、Postgresが接続を処理する方法は、多数の一時的な接続に対してはあまりスケーラブルではないからです。 どの接続方法を使用するかを決定するために、以下の簡単な質問を使用できます。

  • データベースに接続して、接続を維持していますか。もしそうであれば、ダイレクト接続を使用してください。
  • データベースに接続して、すぐに切断するのか(サーバーレス環境など)、そうであれば、接続プールを使用します。

API

Supabaseは自動更新されるAPIを提供しています。データの管理(取得、挿入、更新)を行う場合には、最も簡単な方法です。

インターフィース

好みやユースケースに合わせて、数種類のAPIをご用意しています。

  • REST:RESTインターフェースを通じてデータベースとやり取りします。
  • GraphQL:GraphQLインターフェースを介してデータベースとやり取りします。
  • Realtime:Websocket経由でデータベースの変更をリスニングします。

APIを使用してデータベースのスキーマを管理できません(セキュリティー上の理由による)。これを行うには、ダッシュボードを使用するか、データベースに直接接続する必要があります。

APIのURLを取得

APIのURLとキーはダッシュボード内で確認できます。

1. 「Settings」セクションに移動します。
2. サイドバーの「API」をクリックします。
3. ページ内からAPIのURLとキーを取得します。

ダイレクト接続

すべてのSupabaseプロジェクトは、完全なPostgresデータベースを提供します。Postgresをサポートするツールを使ってデータベースに接続できます。

接続文字列を取得

  1. 「Settings」セクションに移動します。
  2. 「Database」をクリックします。
  3. 接続情報と文字列をみつけます。

接続プール

接続プールは、多数の一時的な接続を管理するのに便利です。例えば、Serverless環境にデプロイされたPrismaを使用している場合です。

接続プールの仕組み

「接続プール」とは、PostgreSQLのネイティブなシステムではなく(PostgreSQLの外部にある)、接続を管理するシステムのことです。Supabaseでは、PgBouncerを使用して接続プーリングを行っています。

クライアントがリクエストを行うと、PgBouncerは利用可能な接続をクライアントに「割り当て」ます。 クライアントのトランザクションまたはセッションが完了すると、接続はプールに戻され、他のクライアントが自由に使用できるようになります。

Connection pooling

プール・モード(Pool modes)

プール・モードは、PgBouncerがどのように接続を処理するかを決定します。

セッション(Session)

新しいクライアントが接続すると、そのクライアントが切断するまで、そのクライアントに接続が割り当てられます。その後、接続はプールに戻されます。

このオプションでは、すべてのPostgreSQLの機能を使用できます。

トランザクション(Transaction)

これは、サーバーレス機能に推奨されるオプションです。接続は、トランザクションの間だけ、クライアントに割り当てられます。同じクライアントからの連続した2つのトランザクションは、2つの異なる接続で実行できます。

プリペアド文などのPostgreSQLのセッションベースの機能の一部は、このオプションでは使用できません。 互換性のない機能の包括的なリストはこちらで確認できます。

命令文(Statement)

これは最も詳細なオプションです。接続は全ての命令文の後、プールに戻されます。複数の命令文を含むトランザクションは許可されません。このオプションは、AUTOCOMMITを使用している場合に最適です。

接続用の文字列をみつける

  1. 「Database」セクションに移動します。
  2. 「Connection Pooling」をクリックします。
  3. 接続情報と接続のための文字列をみつけます。

SSL接続

データベースへの接続時に使用し、盗聴や中間者攻撃を防止します。

アプリケーションのダッシュボードから、接続情報とサーバールート証明書を取得します。 接続情報と証明書

証明書をダウンロードして$HOME/Downloads/prod-ca-2021.cerに保存します。ホストアドレスをdb.abcdefghijklm.supabase.coと仮定すると、以下の手順をすることでSSLが有効な状態でDBへ接続できます。

  1. psqlを使用
psql "sslmode=verify-full sslrootcert=$HOME/Downloads/prod-ca-2021.cer host=db.abcdefghijklm.supabase.co dbname=postgres user=postgres"
  1. pgAdminを使用 a. 新規にPostgresサーバーを登録 新しいPostgresサーバーを登録する

    b. サーバーに好きな名前を付け、接続情報を追加します。 Postgresサーバーの名前 接続情報の追加

  2. SSLタブを開き、SSLモードをRequire(必要)に変更します。次に、ルート証明書入力に移動すると、ファイル・ピッカーのモーダルが開きます。 Supabaseダッシュボードからダウンロードした証明書を選択し、サーバーの詳細を保存します。 PgAdminからSSL経由でPostgresへ接続できるようになるはずです。 接続情報の追加