共有

はじめに

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=postgres
psql

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インスタンスを実行することもあるかもしれませんが、ステージング環境や本番環境のデータベースではほぼ確実に認証が必要です。どちらの場合でも認証できることで、さまざまな環境でうまく作業できるようになります。

著者について
Justin Ellingwood

ジャスティン・エリングウッド

ジャスティンは2013年以来、データベース、Linux、インフラ、開発者ツールについて執筆しています。現在は妻と2匹のウサギとともにベルリンに住んでいます。彼は通常、三人称で書く必要がないため、関係者全員にとって安心です。
© . All rights reserved.