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

接続

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. 接続情報と接続のための文字列をみつけます。

Connecting with SSL

Use this when connecting to your database to prevent snooping and man-in-the-middle attacks.

Obtain your connection info and Server root certificate from your application’s dashboard. Connection Info and Certificate.

Assuming you’ve downloaded your certificate and it’s located at $HOME/Downloads/prod-ca-2021.cer, and your Host address is db.abcdefghijklm.supabase.co you can connect to the DB with SSL enabled as illustrated below:

  1. With psql
psql "sslmode=verify-full sslrootcert=$HOME/Downloads/prod-ca-2021.cer host=db.abcdefghijklm.supabase.co dbname=postgres user=postgres"
  1. With pgAdmin
    a. Register a new Postgres server Register a new postgres server.

    b. Name your server to your liking and add the connection info. Name Postgres Server. Add Connection Info.

  2. Navigate to the SSL tab and change the SSL mode to Require. Next navigate to the Root certificate input, it will open up a file-picker modal. Select the certificate you downloaded from your Supabase dashboard and save the server details. PgAdmin should now be able to connect to your Postgres via SSL. Add Connection Info.