

# PostgreSQL データベースエンジンを実行する DB インスタンスへの接続
<a name="USER_ConnectToPostgreSQLInstance"></a>

Amazon RDS によって DB インスタンスがプロビジョニングされると、スタンダードの SQL クライアントアプリケーションを使用してインスタンスに接続できます。接続する前に、DB インスタンスが使用可能でアクセス可能である必要があります。VPC の外部からインスタンスに接続できるかどうかは、Amazon RDS DB インスタンスの作成方法によって異なります。
+ DB インスタンスを*公開*で作成した場合、VPC 外部のデバイスと Amazon EC2 インスタンスからデータベースに接続できます。
+ DB インスタンスを*プライベート*で作成した場合、Amazon VPC 内の Amazon EC2 インスタンスとデバイスのみがデータベースに接続できます。

DB インスタンスがパブリックかプライベートかを確認するには、AWS マネジメントコンソール を使用してインスタンスの **[Connectivity & security]** (接続とセキュリティ) タブを確認します。**[Security]** (セキュリティ) では、「パブリックアクセス可能」の値を見つけることができます。プライベートの場合は [No] (いいえ)、パブリックの場合は [Yes] (はい) です。

Amazon RDS および Amazon VPC のさまざまな設定、およびそれらがアクセシビリティに与える影響の詳細については、「[VPC の DB インスタンスにアクセスするシナリオ](USER_VPC.Scenarios.md)」を参照してください。

**Contents**
+ [psql クライアントをインストールする](#install-psql)
+ [RDS for PostgreSQL DB インスタンスの接続情報の検索](#postgresql-endpoint)
+ [pgAdmin を使用して RDS PostgreSQL DB インスタンスに接続する](USER_ConnectToPostgreSQLInstance.pgAdmin.md)
+ [psql を使用したRDS for PostgreSQL DB インスタンスへの接続](USER_ConnectToPostgreSQLInstance.psql.md)
+ [Amazon Web Services (AWS) JDBC ドライバーを使用した RDS for PostgreSQL への接続](PostgreSQL.Connecting.JDBCDriver.md)
+ [Amazon Web Services (AWS) Python ドライバーを使用した RDS for PostgreSQL への接続](PostgreSQL.Connecting.PythonDriver.md)
+ [RDS for PostgreSQL インスタンスへの接続に関するトラブルシューティング](USER_ConnectToPostgreSQLInstance.Troubleshooting.md)
  + [– 致命的エラー: データベース*名*が存在しません。](USER_ConnectToPostgreSQLInstance.Troubleshooting.md#USER_ConnectToPostgreSQLInstance.Troubleshooting-DBname)
  + [- サーバー接続失敗エラー: 接続がタイムアウトしました。](USER_ConnectToPostgreSQLInstance.Troubleshooting.md#USER_ConnectToPostgreSQLInstance.Troubleshooting-timeout)
  + [セキュリティグループのアクセスルールのエラー](USER_ConnectToPostgreSQLInstance.Troubleshooting.md#USER_ConnectToPostgreSQLInstance.Troubleshooting-AccessRules)

## psql クライアントをインストールする
<a name="install-psql"></a>

EC2 インスタンスから DB インスタンスに接続するには、EC2 インスタンスに PostgreSQL クライアントをインストールします。最新バージョンの psql クライアントを Amazon Linux 2023 にインストールするには、次のコマンドを実行します。

```
sudo dnf install postgresql<version number>
```

最新バージョンの psql クライアントを Amazon Linux 2 にインストールするには、次のコマンドを実行します。

```
sudo yum install -y postgresql
```

最新バージョンの psql クライアントを Ubuntu にインストールするには、次のコマンドを実行します。

```
sudo apt install -y postgresql-client
```

## RDS for PostgreSQL DB インスタンスの接続情報の検索
<a name="postgresql-endpoint"></a>

DB インスタンスが利用可能でアクセス可能な場合は、SQL クライアントアプリケーションに次の情報を提供することによって接続できます。
+ DB インスタンスのエンドポイントで、インスタンスのホスト名 (DNS 名)として機能します。
+ DB インスタンスがリッスンするポート。PostgreSQL のデフォルトポートは 5432 です。
+ DB インスタンスのユーザーネームとパスワード。PostgreSQL のデフォルトの「マスターユーザーネーム」は`postgres`です。
+ データベースの名前とパスワード (DB 名)です。

 これらの詳細は、AWS マネジメントコンソール、AWS CLI[describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html)コマンド、またはAmazon RDS API [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html)オペレーションを使用して取得できます。

**エンドポイント、ポート番号、および DB 名を検索するにはAWS マネジメントコンソールを使用します。**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. RDS コンソールを開き、[**データベース**] を選択して、DB インスタンスを一覧表示します。

1. PstgreSQL DB インスタンス名を選択して、詳細を表示します。

1. **接続とセキュリティ** タブで、エンドポイントをコピーします。また、ポート番号を書き留めます。DB インスタンスに接続するには、エンドポイントとポート番号の両方が必要です。  
![\[RDS コンソールからエンドポイントを取得する\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/PostgreSQL-endpoint.png)

1. **設定**タブで、DB 名をメモします。RDS for PostgreSQL インスタンスの作成時にデータベースを作成した場合は、DB 名に名前が表示されます。データベースを作成しなかった場合、DB 名にダッシュ (‐) が表示されます。  
![\[RDS コンソールから DB 名を取得する\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/PostgreSQL-db-name.png)

以下に、PostgreSQL DB インスタンスに接続する 2 つの方法を示します。初期の例では、オープンソースの PostgreSQL 向け管理開発ツールとして人気のある pgAdmin を使用します。2 番目の例では、PostgreSQL に付属するコマンドラインユーティリティである psql を使用します。

# pgAdmin を使用して RDS PostgreSQL DB インスタンスに接続する
<a name="USER_ConnectToPostgreSQLInstance.pgAdmin"></a>

オープンソースのツール pgAdmin を使用して、RDS for PostgreSQL DB インスタンスに接続できます。クライアントコンピュータに PostgreSQL のローカルインスタンスがなくても、pgAdmin を[http://www.pgadmin.org/](http://www.pgadmin.org/) からダウンロードして使用できます。

**pgAdmin を使用して、 RDS for PostgreSQL DB インスタンスに接続するには**

1. クライアントコンピュータの pgAdmin アプリケーションを起動します。

1. **[Dashboard]** (ダッシュボード) タブで、**[Add New Server]** (新しいサーバーの追加) を選択します。

1. **[Create - Server]** (作成 - サーバー) ダイアログボックスの **[General]** (全般) タブで名前を入力して、pgAdmin のサーバーを特定します。

1. **[Connection]** (接続) タブで、DB インスタンスから以下の情報を入力します。
   + **[ホスト]** に、エンドポイントを入力します (例: `mypostgresql.c6c8dntfzzhgv0.us-east-2.rds.amazonaws.com`)。
   + **[Port]** (ポート) には、割り当てられているポートを入力します。
   + **ユーザーネーム**では、DB インスタンスの作成時に入力したユーザーネームを入力します (「マスターユーザーネーム」をデフォルトから変更した場合、`postgres`)。
   + **パスワード** に、DB インスタンスの作成時に入力したパスワードを入力します。  
![\[DB インスタンスの作成時に入力したパスワードを入力します。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/Postgres-Connect01.png)

1. **[保存]** を選択します。

   接続に問題がある場合は、[RDS for PostgreSQL インスタンスへの接続に関するトラブルシューティング](USER_ConnectToPostgreSQLInstance.Troubleshooting.md) を参照してください。

1. pgAdmin ブラウザでデータベースにアクセスするには、[**Servers**] (サーバー)、DB インスタンス、および **[Databases]** (データベース) を展開します。DB インスタンスのデータベース名を選択します。  
![\[pgAdmin ブラウザで DB インスタンスのデータベース名を選択します\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/Postgres-Connect02.png)

1. SQL コマンドを入力できるパネルを開くには、**[Tools]** (ツール)、**[Query Tool]** (クエリツール) の順に選択します。

# psql を使用したRDS for PostgreSQL DB インスタンスへの接続
<a name="USER_ConnectToPostgreSQLInstance.psql"></a>

psql コマンドラインユーティリティのローカルインスタンスを使用して、RDS for PostgreSQL DB インスタンスに接続できます。PostgreSQL またはクライアントコンピュータにインストールされた psql クライアントのいずれかが必要です。

PostgreSQL クライアントは、[PostgreSQL](https://www.postgresql.org/download/) のウェブサイトからダウンロードできます。オペレーティングシステムのバージョンに対応した手順に従い、psql をインストールします。

psql を使用して RDS for PostgreSQL DB インスタンスに接続するには、ホスト (DNS) 情報とアクセス認証情報、データベース名を指定する必要があります。

RDS for PostgreSQL DB インスタンスに接続するには、以下の形式のいずれかを使用します。接続時にパスワードを求められます。バッチジョブまたはスクリプトには、`--no-password` オプションを使用します。このオプションは、セッション全体に対して設定されます。

**注記**  
サーバーがパスワード認証を要求し、他の出典からパスワードを取得できない場合、`--no-password` との接続試行に失敗します。詳細については、[psql ドキュメント](https://www.postgresql.org/docs/13/app-psql.html)を参照してください。

この DB インスタンスに初めて接続する場合、またはこの RDS for PostgreSQL インスタンスのデータベースをまだ作成していない場合、「マスターユーザーネーム」とパスワードを使用して**Postgres**のデータベースに接続できます。

Unix の場合、次の形式を使用します。

```
psql \
   --host=<DB instance endpoint> \
   --port=<port> \
   --username=<master username> \
   --password \
   --dbname=<database name>
```

Windows の場合、次の形式を使用します。

```
psql ^
   --host=<DB instance endpoint> ^
   --port=<port> ^
   --username=<master username> ^
   --password ^
   --dbname=<database name>
```

例えば、次のコマンドは、架空の認証情報を使用して、`mypgdb` という PostgreSQL DB インスタンス上の `mypostgresql` というデータベースに接続します。

```
psql --host=mypostgresql.c6c8mwvfdgv0.us-west-2.rds.amazonaws.com --port=5432 --username=awsuser --password --dbname=mypgdb 
```

# Amazon Web Services (AWS) JDBC ドライバーを使用した RDS for PostgreSQL への接続
<a name="PostgreSQL.Connecting.JDBCDriver"></a>

Amazon Web Services (AWS) JDBC ドライバーは、高度な JDBC ラッパーとして設計されています。このラッパーは、既存の JDBC ドライバーの機能を補完し、拡張します。ドライバーには、コミュニティ pgJDBC ドライバーとドロップイン互換性があります。

AWS JDBC ドライバーをインストールするには、AWS JDBC ドライバーの .jar ファイル (`CLASSPATH` アプリケーション内) を追加して、それぞれのコミュニティドライバーへの参照を保持します。対応する接続 URL プレフィックスを次のように更新します。
+ `jdbc:postgresql://`～`jdbc:aws-wrapper:postgresql://`

AWS JDBC ドライバーおよびその使用方法の詳細については、「[Amazon Web Services (AWS) JDBC ドライバー GitHub リポジトリ](https://github.com/awslabs/aws-advanced-jdbc-wrapper)」を参照してください。

# Amazon Web Services (AWS) Python ドライバーを使用した RDS for PostgreSQL への接続
<a name="PostgreSQL.Connecting.PythonDriver"></a>

Amazon Web Services (AWS) Python ドライバーは、高度な Python ラッパーとして設計されています。このラッパーは、オープンソースの Psycopg ドライバーの機能を補完し、拡張します。AWS Python ドライバーは Python バージョン 3.8 以降をサポートしています。`aws-advanced-python-wrapper` パッケージは、`pip` コマンドと `psycopg` オープンソースパッケージを使用してインストールできます。

AWS Python ドライバーおよびその使用方法の詳細については、「[Amazon Web Services (AWS) Python Driver GitHub repository](https://github.com/awslabs/aws-advanced-python-wrapper)」を参照してください。

# RDS for PostgreSQL インスタンスへの接続に関するトラブルシューティング
<a name="USER_ConnectToPostgreSQLInstance.Troubleshooting"></a>

**Topics**
+ [– 致命的エラー: データベース*名*が存在しません。](#USER_ConnectToPostgreSQLInstance.Troubleshooting-DBname)
+ [- サーバー接続失敗エラー: 接続がタイムアウトしました。](#USER_ConnectToPostgreSQLInstance.Troubleshooting-timeout)
+ [セキュリティグループのアクセスルールのエラー](#USER_ConnectToPostgreSQLInstance.Troubleshooting-AccessRules)

## – 致命的エラー: データベース*名*が存在しません。
<a name="USER_ConnectToPostgreSQLInstance.Troubleshooting-DBname"></a>

接続時に`FATAL: database name does not exist`のようなエラーが発生する場合、デフォルトのデータベース名 **postgres** を `--dbname` オプションに使用してみてください。

## - サーバー接続失敗エラー: 接続がタイムアウトしました。
<a name="USER_ConnectToPostgreSQLInstance.Troubleshooting-timeout"></a>

DB インスタンスに接続できない場合、最も一般的なエラーは `Could not connect to server: Connection timed out.` です。このエラーを受け取った場合、以下を確認します。
+ 使用しているホスト名が DB インスタンスのエンドポイントであること、および使用しているポート番号が正しいことを確認します。
+ DB インスタンスのパブリックアクセシビリティが**はい**に設定され、外部接続が許可されていることを確認します。**パブリックアクセス**設定を変更するには 、[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md) を参照してください。
+ データベースに接続するユーザーに CONNECT アクセス権があることを確認してください。次のクエリを使用して、データベースへの接続アクセスを提供できます。

  ```
  GRANT CONNECT ON DATABASE database name TO username;
  ```
+ 接続で経由する可能性のあるファイアウォールを通過するアクセス許可のルールが、DB インスタンスに割り当てられたセキュリティグループに設定されていることを確認します。例えば、DB インスタンスをデフォルトポート 5432 で作成した場合、会社のファイアウォールルールにより、外部企業デバイスから当該ポートへの接続がブロックされる可能性があります。

  この問題を解決するには、別のポートを使用するよう DB インスタンスを変更します。また、DB インスタンスに適用されているセキュリティグループが、その新しいポートへの接続を許可していることも確認します。**データベースポート**の設定を変更するには 、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください 。
+ 使用しようとしているポートが PostgreSQL のローカルインスタンスまたはコンピュータで実行している別のサービスによって既に占有されているかどうかを確認します。例えば、同じポート (デフォルトは 5432) でローカル PostgreSQL データベースを実行している場合、RDS for PostgreSQL DB インスタンスに正常に接続できない場合があります。ポートが空いていることを確認するか、可能であれば別のポート番号で接続してみてください。
+ 「[セキュリティグループのアクセスルールのエラー](#USER_ConnectToPostgreSQLInstance.Troubleshooting-AccessRules)」も参照してください。

## セキュリティグループのアクセスルールのエラー
<a name="USER_ConnectToPostgreSQLInstance.Troubleshooting-AccessRules"></a>

最も一般的な接続の問題は、DB インスタンスに割り当てられているセキュリティグループのアクセスルールに関係するものです。DB インスタンスの作成時にデフォルトのセキュリティグループを使用した場合、恐らくそのセキュリティグループにはインスタンスへのアクセスを許可するルールはありません。

接続が機能するには、作成時に DB インスタンスに割り当てたセキュリティグループが DB インスタンスへのアクセスを許可する必要があります。例えば、DB インスタンスが VPC で作成された場合、接続を承認する VPC セキュリティグループが必要です。アプリケーションが実行中のデバイスまたはAmazon EC2 インスタンスからの接続を承認しないセキュリティグループを使用して、 DB インスタンスを作成したかどうかを確認します。

セキュリティグループでインバウンドのルールを追加または編集できます。**出典** に対して **マイ IP** を選択すると、ブラウザで検出された IP アドレスから DB インスタンスにアクセスできます。詳細については、「[セキュリティグループを作成して VPC 内の DB インスタンスへのアクセスを提供する](CHAP_SettingUp.md#CHAP_SettingUp.SecurityGroup)」を参照してください。

または、DB インスタンスが VPC の外部で作成された場合は、それらの接続を承認するデータベースセキュリティグループが必要です。

Amazon RDS セキュリティグループの詳細については、「[セキュリティグループによるアクセス制御](Overview.RDSSecurityGroups.md)」を参照してください。