シェア

はじめに

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

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

著者について
Justin Ellingwood

Justin Ellingwood

Justinは、2013年からデータベース、Linux、インフラストラクチャ、および開発者ツールについて執筆しています。彼は現在、妻と2匹のウサギと一緒にベルリンに住んでいます。彼は通常、三人称で書く必要はありません。これは関係者全員にとって安心です。