はじめに
PostgreSQLデータベースを操作する際に最初に考える必要があることの1つは、データベースインスタンスに接続して対話する方法です。これには、データベースと対話するために使用するコンポーネントであるデータベースクライアントと、データを保存、整理、およびアクセスを提供する実際のPostgreSQLインスタンスであるデータベースサーバー間の連携が必要です。
このため、認証に必要な情報を提供してクライアントとして接続する方法を理解する必要があります。このガイドでは、ネイティブのpsql
コマンドラインクライアント— データベースインスタンスと対話する最も一般的で便利な方法の1つを使用して、PostgreSQLデータベースに接続する方法について説明します。
コンパニオンガイドでは、プロジェクトのニーズに合わせてPostgreSQLの認証を設定する方法について説明しています。PostgreSQLでの認証の仕組みをより完全に理解するために、両方のガイドを読むことを検討してください。
データベースクライアントまたはライブラリが接続URIを要求する場合は、代わりにPostgreSQL接続URIの理解に関するガイドを参照してください。
psql
クライアントに関する基本情報
psql
クライアントは、PostgreSQLのネイティブコマンドラインクライアントであり、データベースインスタンスに接続して、インタラクティブセッションを提供したり、サーバーにコマンドを送信したりできます。これは、アプリケーションライブラリを介してデータベースと対話する前に、初期設定を実装し、基本構成を適切に配置する場合に特に役立ちます。さらに、psql
は、プログラムが使用するアクセスパターンを開発しながら、インタラクティブな探索やアドホッククエリに最適です。
接続方法は、PostgreSQLサーバーの構成と、アカウントを認証するために利用できるオプションによって異なります。次のセクションでは、基本的な接続オプションのいくつかについて説明します。わかりやすくするために、ローカル接続とリモート接続を区別します。
- ローカル接続:クライアントとPostgreSQLインスタンスが同じサーバー上にある接続
- リモート接続:クライアントが別のコンピューターで実行されているネットワークアクセス可能なPostgreSQLインスタンスに接続している場合
まず、同じコンピューターからデータベースに接続することから始めましょう。
psql
を使用したローカルデータベースへの接続
引数を指定しない場合、psql
コマンドはUnixソケットファイルに接続して、ローカルデータベースにアクセスしようとします。接続しようとしているPostgreSQLのユーザー名とデータベース名として、オペレーティングシステムのユーザー名を使用します。
デフォルトでは、PostgreSQLの最新バージョンは、ピア認証と呼ばれるもの用に構成されています。ピア認証は、ユーザーのオペレーティングシステムのユーザー名と一致する有効なPostgreSQLユーザーが存在する場合、ユーザーを自動的に認証します。
したがって、現在のユーザーがローカルデータベース上の有効なPostgreSQLユーザーである場合は、次のように入力して接続できます。
psql
ただし、通常のオペレーティングシステムのユーザー名に、関連付けられたPostgreSQLユーザー名が既にある可能性は低いです。したがって通常、関連付けられたPostgreSQLロールが既にあるオペレーティングシステムのユーザー名を使用してPostgreSQLにログインする必要があります。
デフォルトでは、PostgreSQLのスーパーユーザー、または管理者アカウントは、postgres
と呼ばれます。インストール時に、postgres
というユーザーもオペレーティングシステムに作成されます。したがって、postgres
ユーザーとしてPostgreSQLにログインするには、postgres
オペレーティングシステムユーザーとして接続する必要があります。これを行うにはいくつかの方法があります。
ほとんどのシステムでpostgres
ユーザーとしてシェルを取得する最も簡単な方法は、sudo
コマンドを使用することです。postgres
ユーザーのシェルセッションを開いてからデータベースにログインするには、次のように入力します。
sudo --login --user=postgrespsql
追加のシェルコマンドをpostgres
ユーザーとして実行する必要がない場合は、psql
コマンドをpostgres
ユーザーとして直接実行することもできます。これにより、最初にシェルに移動する代わりに、PostgreSQLセッションにすぐにログインできます。
sudo --login --user=postgres psql
これらの方法のいずれかを使用すると、postgres
PostgreSQLユーザーアカウントにログインできるはずです。
リモートデータベースへの接続
セキュリティ上の理由とローカルソケットファイルへの依存のため、ピア認証はリモート接続には使用できません。代わりに、ユーザーは別の方法を使用してログインする必要があります。
利用可能な認証方法は、PostgreSQLインスタンスの構成によって異なります。ただし、最も一般的なのは、次の情報を提供することで認証できることです。
オプション | 説明 |
---|---|
ホスト名 | PostgreSQLサーバーのネットワークホスト名またはIPアドレス。-h オプションは、ホスト名を指定するために使用されます。 |
ネットワークポート | PostgreSQLサーバーが実行されているネットワークポート。デフォルトでは、これはポート5432です。デフォルトが使用されている場合は省略できます。別のポートを指定するには、-p オプションを使用できます。 |
PostgreSQLユーザー名 | 接続するデータベースユーザー名。指定しない場合、オペレーティングシステムのユーザー名が使用されます。-U オプションは、デフォルトをオーバーライドし、接続するユーザー名を定義するために使用されます。 |
PostgreSQLパスワード | 指定されたユーザー名に関連付けられたPostgreSQLパスワード。psql はパスワードが提供されていない場合にパスワードを要求するため、これは省略できることがよくあります。 |
PostgreSQLデータベース | アクセスするPostgreSQLデータベース名。指定しない場合、オペレーティングシステムのユーザー名がデータベース名として使用されます。別のデータベースを指定するには、-d オプションを使用します。 |
psql
に接続情報を提供する方法は複数あります。ここでは、最も一般的な2つの方法、つまりオプションを渡す方法と接続文字列を使用する方法について説明します。
オプションを使用してpsql
に接続情報を渡す
したがって、リモートデータベースに接続するための基本形式は、通常、次のようになります。
psql -h <hostname> -p <port> -U <username> -d <database>
リモートサーバーは、ほとんどのアカウントでパスワードが必要であることを示し、その時点でpsql
はパスワードを要求します。認証に成功すると、新しいインタラクティブPostgreSQLセッションが開始されます。
例として、次の要件でデータベースに接続したいと想像できます。
- ホスト名:
myhost
- ポート:1234
- データベース:
applicationdb
- ユーザー名:
myapplicationuser
- パスワード:
mypass
次のオプションを使用してpsql
を呼び出すと、認証できます。
psql -h myhost -p 1234 -U myapplicationuser -d applicationdb
Enterキーを押すと、パスワードの入力を求められ、mypass
で認証できます。
接続文字列を使用してpsql
に接続情報を渡す
同じ情報を、PostgreSQL接続文字列にエンコードすることもできます。接続文字列は、単一のURI文字列で同じ情報を提供し、特定の文字を異なるフィールド間の区切り文字として使用します。
接続文字列には、次の一般的な形式があります。
postgresql://<username>:<password>@<hostname>:<port>/<database>
各フィールドは、不要な場合、またはデフォルト値が有効な場合は省略できます。
前の例で使用したオプションの代わりに、接続文字列を使用してpsql
に接続することもできます。
psql postgresql://myapplicationuser:mypass@myhost:1234/applicationdb
psql
ツールはこれらの形式のいずれかを使用できるため、どちらか好きな方を使用してください。遭遇する可能性のある他のツールまたはライブラリでは、どちらか一方に依存するように促される場合があります。
PostgreSQLサーバーの認証設定の調整
ユーザーがPostgreSQLインスタンスを認証する方法を規定するルールを変更する場合は、サーバーの構成を変更することで変更できます。この記事でPostgreSQLの認証構成を変更する方法を確認できます。
結論
このガイドでは、クライアント側からPostgreSQL認証について説明しました。さまざまな方法を使用して、ローカルおよびリモートデータベースインスタンスの両方に接続するためにpsql
コマンドラインクライアントを使用する方法を説明しました。
さまざまなPostgreSQLインスタンスに接続する方法を知ることは、データベースシステムの操作を開始する上で不可欠です。特別な認証を必要としない開発用のローカルPostgreSQLインスタンスを実行する場合がありますが、ステージング環境と本番環境のデータベースはほぼ確実に認証を必要とします。どちらの場合でも認証できることで、さまざまな環境で適切に作業できるようになります。
PostgreSQLデータベースコネクタは、JavaScriptおよびTypeScriptアプリケーションからPostgreSQLデータベースを管理するのに役立ちます。既存のプロジェクトにPrismaを追加する方法、またはPrismaをゼロから始める方法をご覧ください。