【AWS_47】LinuxサーバのPostgreSQLデータベースへWindowsサーバのpgAdmin4から接続する

2025/08/25
 
この記事を書いている人 - WRITER -
ブログ運営者のtkjzblogです。 仕事柄新しいシステムに触れることが多いです。 Windows、Linux(RHEL)がメインです。その他、VMwareやOffice365など仮想環境やクラウド環境も少しですが触れることがあります。 いろいろ忘れがちのため、このサイトへ情報を書き溜めていきたいと思います。 どうぞ、よろしくお願い致します。

今回、勉強の一環としてLinuxサーバのPostgreSQLデータベースへWindowsサーバのpgAdmin4から接続してみたいと思います。
具体的には、以下のとおりです。

1.プライベートサブネットのAmazon Linux 2023 へPostgreSQLをインストールしてデータベース、テーブルを作成する。
2.パブリックサブネットのWindows Serverへ pgAdmin4 をインストールする。
3.pgAdmin4 から PostgreSQL のデータベースへ接続してテーブルの状況を確認する。

その他にもNATゲートウェイ、セッションマネージャー、EC2 Instance Connect など今まで勉強したことを復習しながら進めていきたいと思います。
アーキテクチャ図は、以下のとおりです。

   

事前準備

VPC、パブリックサブネット、プライベートサブネット、ルートテーブル、EC2インスタンス(Windows、Linux)、セッションマネージャー、EC2 Instance Connect、NATゲートウェイの作成は、以下の記事を参照してください。
以下を参照していただき、この記事での詳細な説明は割愛させていただきます。ご了承ください。

【AWS_04】VPCの作成
 
【AWS_05】サブネット(公開用サブネット)の作成
 
【AWS_06】インターネット通信できるようインターネットゲートウェイ、ルートテーブルを作成
 
【AWS_07】仮想サーバー(インスタンス)の作成 ※キーペアは「キーペアはなしで続行」を選択
 
【AWS_12】プライベート用サブネットの作成
 
【AWS_13】プライベート用サブネットの中に新規インスタンスを作成
 
【AWS_15】NATゲートウェイの作成と設定
 
【AWS_21】EC2インスタンスへSSH以外の方法で接続する(AWS Systems Manager)
 
【AWS_34】EC2 Instance Connectを介してプライベートサブネットのEC2インスタンスへ接続する
 
【AWS_41】Windows Server を試してみる
 
【AWS_42】Windows Server を日本語化してみる
 
【AWS_46】EC2インスタンスのタイムゾーンをJST(日本標準時)へ変更する

   

EC2 Instance Connectを介してプライベートサブネットのEC2インスタンス(Linuxサーバ)へ接続する

EC2 Instance Connectの設定が完了している前提で進めます。
今回の対象のLinuxサーバは「db-sv」となります。

EC2 Instance Connectを介してプライベートサブネットのEC2インスタンスへ接続できることを確認します。

   

PostgreSQLインストール、各種設定(Linuxサーバ)

NATゲートウェイが構成されてプライベートサブネットのEC2インスタンス(Linuxサーバ)がインターネット接続できる前提で進めます。

   

PostgreSQLインストール

事前に公開されているPostgreSQLのバージョンを確認します。バージョン確認の結果より「postgresql17-server.x86_64」をインストールしてみたいと思います。

dnf list postgresql*

以下dnfコマンドを実行し、最終行に「Complete!」が表示されればインストール完了です。

dnf -y install postgresql17-server

PostgresSQLのバージョンを確認します。
以下コマンドを実行してバージョンを確認します。

psql –version  (※psql -V でも確認可能)

   

データベースの起動

あまり詳しいことは理解できておらず、以前ローカル環境で実施した内容を参考に進めています。
まず以下コマンドでデータベースクラスタ(データベースを格納する領域)の作成します。
具体的には、/var/lib/pgsql/dataに設定ファイルなどが配置されます。

postgresql-setup –initdb

※補足となりますが「postgresql-setup initdb」とinitdbの前にハイフンをつけなかったらWARNINGが出ました。

念のため出力されている initdb_postgresql.logファイルを確認しておきます。エラーはなさそうです。

cat /var/lib/pgsql/initdb_postgresql.log

次に以下コマンドでOSを再起動してもサービスが自動起動(enable)するよう設定します。

systemctl enable postgresql.service

次に以下コマンドでサービスを起動してから、ステータスを確認してサービスが起動していることを確認します。

systemctl start postgresql.service
systemctl status postgresql.service

   

データベースの確認

サービスが起動したので初期設定でどのようなデータベースが存在するか確認してみます。
「psql -l」コマンドで確認するのですが、Linuxのユーザーがrootですとエラーで確認できないのでユーザーをpostgresユーザーへスイッチします。

※rootユーザーでは以下のようなエラーになり、pslqを実行できませんのでご注意ください

以下コマンドでpostgresユーザーにスイッチします。プロンプトが「postgres@・・・」に変更されます。

su – postgres

次に psql コマンドでデータベースを確認します。
psqlとは、PostgreSQLのターミナル型フロントエンドです。 対話的に問い合わせを入力し、それをPostgreSQLに対して発行して結果を確認することができます。

psql -l

以下コマンドでポートも確認しておきます。5432番ポートがLISTENされていることがわかります。

ss -nat

   

データベースの作成

今回データベースを作成する際、psqlでPostgreSQLへ接続してからcreate文でデータベースを作成します。
psqlでPostgreSQLへ接続するとプロンプトが「postgres=#」に変わります。
今回は検証で「testdb01」というデータベースを作成します。SQLは文末に「;」セミコロンが必要ですので忘れないでください。

psql

create database testdb01 ;

PostgreSQLから切断する時は「\q」とEnterキーを押下します。

psql コマンドでデータベース「testdb01」が作成されたことを確認します。

psql -l

   

postgresユーザー(OS、 DB)のパスワード変更

PostgreSQLをインストールした時点で自動的にデータベースの管理ユーザーであるpostgresユーザーが作成されます。
ここで言うpostgresユーザーは、Amazon Linux 2023に作成されたpostgresユーザーとなります。
このユーザーのパスワードは未設定の状態であるため、アカウントロック状態となっており、このままではrootユーザーからsuコマンドでスイッチする方法以外でのログインができません。
そこで、postgresユーザーでログインできるようにパスワードを設定します。

パスワードの設定は「passwd <ユーザー名>」コマンドで行えますので「passwd postgres」となります。

passwd postgres

前述でpostgresユーザーのパスワードを設定しましたが、そのユーザーはOS(Amazon Linux2023)のユーザーです。
次に設定するのはミドルウェア(PostgreSQL)が管理するpostgesユーザーです。ややこしいですね。。。
同じユーザー名でも両者は異なるユーザーとなるため混合しないように注意して下さい。
まず、OSのpostgresユーザーにスイッチします。

su – postgres

続いて、psqlコマンドを実行してPostgreSQLへ接続します。プロンプトが「postgres=#」に変わることを確認します。

psql

PostgreSQLが管理するユーザーの方のpostgresユーザーに対してパスワードを設定します。
パスワードは「P@ss!234db」としています。

alter role postgres with password ‘P@ss!234db’;

これでパスワードの設定は完了したので、「\q」と入力しEnterキーを押下して切断します。ちなみに「Ctrl+d」でも切断することができます。

PostgreSQLが管理するユーザーの方のpostgresユーザーに対してパスワードを設定したので接続する際にパスワードを求められるかなと思いましたが、これだけでは反映されておらず接続時にパスワードは求められません。
後から分かったのですがPostgreSQLで「peer認証」という設定になっていることが原因でした。せっかくですので「peer認証」から「md5認証」へ変更したいと思います。

   

PostgreSQLのpeer認証からmd5認証へ変更

現時点で「peer認証」や「md5認証」について、説明できるほど知識はありませんのでご了承ください。ただ、パスワード認証にするためにはデフォルトの「peer認証」設定ではダメということです。

●「md5認証」は、ユーザーのパスワードをMD5ハッシュ関数を用いて暗号化し、そのハッシュ値を送信することでパスワード認証を行う方法です。
●「peer」認証は、接続元のローカルユーザー名とPostgreSQLのユーザー名が一致する場合、パスワードなどの認証なしに接続を許可する方式です。

設定ファイルの /var/lib/pgsql/data/pg_hba.conf を編集します。

設定変更後はPostgreSQLを再起動し、設定を反映させます。なお、PostgreSQLの再起動はrootユーザーで行います。

systemctl stop postgresql.service
systemctl start postgresql.service

postgresユーザーへスイッチします。

su – postgres

検証用データベース「testdb01」へpostgresユーザーで接続するとパスワードが求められるようになりました。

psql -U postgres -d testdb01

   

PostgreSQLの接続ホスト許可

PostgreSQLへの接続について、現状ではローカルホスト(127.0.0.1)からしかLISTENしていません。
そのため、リモートサーバーからPostgreSQLには接続できません。
今回目標とするリモートサーバ(Windows)のpgAdmin4から接続するためには、リモートサーバーからの接続を受け付ける(LISTEN)必要があるので設定を変更します。

ss -nat

2つの設定ファイルを変更します。

/var/lib/pgsql/data/pg_hba.conf を以下のとおり編集します。
  127.0.0.1/32 ⇒ 0.0.0.0/0
  ident ⇒ md5

次に /var/lib/pgsql/data/postgresql.conf を以下のとおり編集します。
  行頭の「#」を削除(コメントアウトを解除)
  localhost ⇒ *

設定変更後はPostgreSQLを再起動し、設定を反映させます。なお、PostgreSQLの再起動はrootユーザーで行います。

systemctl stop postgresql.service
systemctl start postgresql.service

以下コマンドでPostgreSQLがリモートサーバーからも受け付けられる(LISTEN)ようになったことを確認します。

ss -nat

   

テーブルの作成

検証用のテーブル「test_tbl」を作成します。テーブル情報は以下のとおりです。
まずはテーブルを作成するうえで必要な赤枠内の属性名、データ型を登録します。値は後ほど投入します。

検証用データベース「testdb01」へ接続してから検証用テーブル「test_tbl」を作成します。まず、検証用データベースを指定してPostgreSQLへ接続します。

su – postgres
psql -U postgres -d testdb01

以下の CREATE文を実行して検証用テーブル「test_tbl」を作成し、属性名、データ型を設定します。

create table test_tbl (userid character varying(8),busyo character varying,syozoku character varying,saiyobi date,flg1 character varying ) ;

作成したテーブルを確認するために psql メタコマンドの ¥dt コマンドを実行します。

\dt

作成したテーブルに含まれるカラムに関する情報を取得する方法です。 psql メタコマンドの \d コマンドにテーブル名を指定して実行します。

\d test_tbl

test_tbl には、まだ値が入力していないことを SELECT文 を実行して確認します。

select * from test_tbl;

   

テーブルへ値を投入する

検証用テーブルが作成できたので値を投入します。INSERT 文を使用して値を指定します。
青枠の値を投入します。(※flg1だけ表と実際のINSERT文に違いがありますが見逃してください・・・)
他にuser02、user03の情報も追加しています。

insert into test_tbl (userid,busyo,syozoku,saiyobi,flg1) values (‘user01′,’9n’,’9n99′,’2024-05-01′,’0′);
insert into test_tbl (userid,busyo,syozoku,saiyobi,flg1) values (‘user02′,’8n’,’8n88′,’2023-07-01′,’1′);
insert into test_tbl (userid,busyo,syozoku,saiyobi,flg1) values (‘user03′,’3n’,’3n33′,’2024-10-01′,’0′);

SELECT文 を実行して確認します。値が投入されたことが確認できました。

select * from test_tbl;

ここで一度「\q」と入力して切断します。

先ほどはPostgreSQLへ接続してからSELECT文を実行して確認しましたが、今回はPostgreSQLへ接続せずに psql コマンドを利用して確認してみます。(OS側という表現があっているか微妙ですが、OS側から直接確認するという感じです。)

psql -U postgres -d testdb01 –pset format=unaligned –field-separator=”,” -t -c “select * from test_tbl order by userid” ;

  

ここまでの作業でPostgreSQL側の設定は、完了しました。

次は、Windowsサーバ側の作業へ移り、pgAdmin4 をインストールして設定していきます。

   

pgAdmin4のインストール、設定(Windowsサーバ)

パブリックサブネットのEC2インスタンス(Windowsサーバ)へpgAdmin4をインストールして設定します。
セッションマネージャー、Windows OSの日本語化の設定が完了している前提で進めます。
今回の対象のWindowsサーバは「win-sv」となります。

   

pgAdmin4のインストール

以下ページへアクセスします。

https://www.pgadmin.org/download/pgadmin-4-windows/

最新の「pgAdmin 4 v9.7 (released Aug. 21, 2025)」をクリックします。

Quick Linksページに遷移したら「pgadmin4-9.7-x64.exe」をクリックしてダウンロードします。

ダウンロードしたファイルを右クリック「管理者として実行」を選択します。

検証なのでどちらでもいいと思いますが今回は「Install for all users」を選択しました。
個人向けにインストールする場合は Install for me only、全ユーザ向けにインストールする場合は Install for all users という考え方でよいそうです。

「Next」をクリックします。

License Agreement で「I accept the agreement」を選択し、「Next」をクリックします。

Select Destination Location はデフォルトのままで「Next」をクリックします。

Select Start Menu Folder はデフォルトのままで「Next」をクリックします。

Select Start Menu Folder はデフォルトのままで「Next」をクリックします。

Ready to Install で内容を確認し、「Install」をクリックします。

インストールが完了したら「Finish」をクリックします。

   

pgAdmin4の日本語化

スタートメニューから「pgAdmin4」をクリックして起動します。

メニューバーから「File」を選択し、次に「Preferences」をクリックします。

左側のメニューから「Miscellaneous」を選択、右側の「Language」を「Japanese」に変更します。 画面上側の「Save」アイコンをクリックします。

「A page refresh is required. Do you wish to refresh the page now?」に対して「Refresh」をクリックします。

「Are you sure you want to quit the application?」に対して「Yes」をクリックします。

表示が日本語に変わりました。

    

pgAdmin4からデータベースへ接続

pgAdmin4 を起動して接続したいLinuxサーバのデータベース情報を登録します。
Seversを右クリックし、登録 > サーバ を選択します。

一般タブの名前に任意のサーバ名を入力します。今回は「testdb」とします。

接続タブに移り、ホスト名/アドレスを入力します。
今回はプライベートサブネットのLinuxサーバのIPアドレス「10.0.2.198」を入力します。

次に、ユーザ名を入力します。
ユーザ名はpostgresqlでsuperuserに設定したアカウント名を入力します。
もし、superuserのアカウントがわからない場合はデータベースをpsqlで立ち上げて「\du」コマンドを入力してください。
今回はユーザ名は「postgres」を入力します。※特に何もしてない方は「postgres」だと思います。

パスワードは、postgresユーザに設定したパスワードを入力します。
「パスワード保存」のトグルをオンにします。
ここまで入力が完了しましたら、下の「保存」ボタンを押して作成完了です。

「Servers」の下に先ほど登録した「testdb」が作成されました。
各種設定がうまくできていればpgAdmin4からLinuxサーバ側のpostgresqlのデータベースへ接続ができるようになります。

データベース(2)を展開するとLinuxサーバ側のpostgresqlへ作成したデータベース「testdb01」が確認できます。
さらに「testdb01」を展開、スキーマ > public > テーブル(1)を展開するとLinuxサーバ側のpostgresqlへ作成したテーブル「test_tbl」が確認できます。
「test_tbl」を右クリック > データを閲覧/編集 > すべての行 をクリックします。

クエリツールのウィンドウが表示されてテーブルのすべての行の情報が表示されました。

クエリツールのクエリの内容を変更し、実行アイコンをクリックするとクエリが実行され、結果が表示されます。

  

以上で今回目標としていた「LinuxサーバのPostgreSQLデータベースへWindowsサーバのpgAdmin4から接続してみたい」を検証することができました。

   

検証後のリソースの削除

簡単にですが、作成したリソースの削除について記載します。

・EC2インスタンス
  削除
 
・NATゲートウェイ
  削除
 
・VPCエンドポイント
  削除
 
・Elastic IP
  解放
 
・VPC
  削除

   

まとめ

今回いろいろな要素が入り、だいぶ長くなりましたが検証することができました。参照記事が多く、醜いかもしれませんが、順序立てて進めていけば最後まで完了すると思います。

途中、EC2 Instance Connect 経由のプライベートサブネットのLinuxサーバにおいて、vi(vim)の編集がうまくいかなかったことは課題でしたので引き続き調べていきたいと思います。

    

以下、他の記事をまとめた一覧です。AWSもまとめています。

   

この記事を書いている人 - WRITER -
ブログ運営者のtkjzblogです。 仕事柄新しいシステムに触れることが多いです。 Windows、Linux(RHEL)がメインです。その他、VMwareやOffice365など仮想環境やクラウド環境も少しですが触れることがあります。 いろいろ忘れがちのため、このサイトへ情報を書き溜めていきたいと思います。 どうぞ、よろしくお願い致します。

Copyright© しっぱいはせいこうのもと , 2025 All Rights Reserved.