Windows 10/11でWSLを使ってPostgreSQLデータベースに接続する
WSLからWindows PostgreSQLデータベースに接続する方法
Windows Subsystem for Linux (WSL) を使用して、Windows 10または11上で動作するPostgreSQLデータベースに接続することができます。この方法は、WSL環境でPostgreSQLデータベースを開発・管理する場合に役立ちます。
前提条件
- Windows 10 または 11
- WSL 2 がインストールされている
- PostgreSQL が Windows と WSL にインストールされている
- WSL ディストリビューション(Ubuntu、Debianなど)のファイアウォール設定が適切に行われている
手順
- WSL ディストリビューションでPostgreSQLサーバーを起動する
sudo service postgresql start
- WSL ディストリビューションのIPアドレスを確認する
ifconfig
出力例:
eth0: flags=4000<UP,BROADCAST,RUNNING,MULTICAST> mtu:1500
...
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
この例では、WSL ディストリビューションのIPアドレスは 10.0.2.15
です。
psql -h 10.0.2.15 -p 5432 -U postgres
-h
: ホスト名。この場合は、WSL ディストリビューションから見たWindowsマシンのIPアドレスを指定します。-p
: ポート番号。PostgreSQLのデフォルトポートは5432です。-U
: ユーザー名。PostgreSQLのデフォルトユーザー名はpostgres
です。
パスワードを求められますので、Windows PostgreSQLデータベース設定時に設定したパスワードを入力してください。
接続確認
接続が成功すると、psqlシェルが起動します。データベースの一覧を表示するには、以下のコマンドを実行します。
SELECT * FROM pg_database;
補足事項
- WSL ディストリビューションの名前によって、コマンドの若干の違いがあります。
- Windows PostgreSQLデータベースの設定によっては、接続方法が異なる場合があります。
- ファイアウォール設定が適切に行われていない場合、接続できない可能性があります。
WSLを使ってWindows PostgreSQLデータベースに接続することで、WindowsとLinux環境の利点を活かした開発環境を構築することができます。
WSLからWindows PostgreSQLデータベースに接続するサンプルコード
接続情報
- ポート番号: 5432
- ユーザー名:
postgres
- パスワード:
password
- データベース名:
mydatabase
接続コード
psql -h 10.0.2.15 -p 5432 -U postgres -d mydatabase
説明
psql
: PostgreSQLクライアントの実行ファイル-h
: ホスト名-p
: ポート番号-U
: ユーザー名-d
: データベース名
補足
- 上記のコードは、WSLディストリビューションのIPアドレスが
10.0.2.15
、Windows PostgreSQLデータベースのパスワードがpassword
、データベース名がmydatabase
である場合を想定しています。 - 実際の接続情報に合わせて、コードを適宜変更してください。
- 詳細については、WSLとPostgreSQLのドキュメントを参照してください。
WSLからWindows PostgreSQLデータベースに接続するその他の方法
環境変数を使う
以下の環境変数を設定することで、接続情報の一部を省略することができます。
export PGHOST=10.0.2.15
export PGPORT=5432
export PGUSER=postgres
上記の例では、ホスト名、ポート番号、ユーザー名が設定されています。データベース名は、コマンドオプションで指定する必要があります。
接続するには、以下のコマンドを実行します。
psql -d mydatabase
pg_hba.confファイルを編集する
Windows PostgreSQLデータベースの pg_hba.conf
ファイルを編集することで、WSLディストリビューションからの接続を許可することができます。
- Windows PostgreSQLデータベースのデータディレクトリに移動します。
cd C:\Program Files\PostgreSQL\14\data
vi pg_hba.conf
- 以下の行を追加します。
host all all 10.0.2.15/32 md5
host
: 接続先のホスト名。この場合は、all
を指定します。all
: すべてのユーザー。10.0.2.15/32
: WSLディストリビューションのサブネット。md5
: MD5認証を使用する。
net stop postgresql
net start postgresql
Dockerを使用することで、WSL上でWindows PostgreSQLデータベースを起動することができます。
- Dockerをインストールします。
https://docs.docker.com/desktop/install/windows-install/
- 以下のコマンドを実行して、Windows PostgreSQLデータベースのコンテナを起動します。
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=password postgres
-d
: コンテナをデタッチモードで起動する。-p 5432:5432
: コンテナの5432ポートをホストマシンの5432ポートにマッピングする。-e POSTGRES_PASSWORD=password
: コンテナ内のPostgreSQLユーザーのパスワードをpassword
に設定する。
- WSLディストリビューションからコンテナ内のPostgreSQLデータベースに接続するには、以下のコマンドを実行します。
psql -h localhost -p 5432 -U postgres
注意事項
- 上記の方法はいずれも、WSLディストリビューションがWindowsマシンと同じネットワーク上に存在することを前提としています。
- WSLディストリビューションが別のネットワーク上にある場合は、適切なネットワーク設定を行う必要があります。
- セキュリティ上の理由から、WSLディストリビューションからの接続を許可する前に、十分な検討が必要です。
これらの方法は、それぞれ異なる利点と欠点があります。状況に合わせて、最適な方法を選択してください。
postgresql windows-subsystem-for-linux