PostgreSQL
PostgreSQLデータベースへの接続
はじめに
PostgreSQLデータベースを扱う際にまず考える必要があることの一つは、データベースインスタンスに接続し、操作する方法です。これには、データベースを操作するために使用するコンポーネントであるデータベースクライアントと、データを保存、整理、アクセスを提供する実際のPostgreSQLインスタンスであるデータベースサーバー間の連携が必要です。
このため、クライアントとして接続するために必要な認証情報を提供する方法を理解する必要があります。このガイドでは、データベースインスタンスを操作するための最も一般的で有用な方法の1つである、ネイティブのpsql
コマンドラインクライアントを使用して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
エンターキーを押すとパスワードの入力を求められ、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をゼロから始める方法を学びましょう。