Windows 10/11でWSLを使ってPostgreSQLデータベースに接続する

2024-07-04

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など)のファイアウォール設定が適切に行われている

手順

  1. WSL ディストリビューションでPostgreSQLサーバーを起動する
sudo service postgresql start
  1. 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ディストリビューションからの接続を許可することができます。

        1. Windows PostgreSQLデータベースのデータディレクトリに移動します。
        cd C:\Program Files\PostgreSQL\14\data
        
          vi pg_hba.conf
          
          1. 以下の行を追加します。
          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データベースを起動することができます。

          1. Dockerをインストールします。

          https://docs.docker.com/desktop/install/windows-install/

          1. 以下のコマンドを実行して、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 に設定する。
          1. WSLディストリビューションからコンテナ内のPostgreSQLデータベースに接続するには、以下のコマンドを実行します。
          psql -h localhost -p 5432 -U postgres
          

          注意事項

          • 上記の方法はいずれも、WSLディストリビューションがWindowsマシンと同じネットワーク上に存在することを前提としています。
          • WSLディストリビューションが別のネットワーク上にある場合は、適切なネットワーク設定を行う必要があります。
          • セキュリティ上の理由から、WSLディストリビューションからの接続を許可する前に、十分な検討が必要です。

          これらの方法は、それぞれ異なる利点と欠点があります。状況に合わせて、最適な方法を選択してください。


          postgresql windows-subsystem-for-linux


          全文検索エンジンの選び方:MySQL、PostgreSQL、Lucene、Sphinx、Elasticsearch、Solr、MeiliSearch、Algolia、Firebase Realtime Databaseを徹底比較

          この解説では、MySQLとPostgreSQLにおける全文検索機能と、Lucene、Sphinxなどの外部全文検索エンジンとの比較について、プログラミングの観点から分かりやすく説明します。MySQLとPostgreSQLは、どちらも全文検索機能を備えています。...


          SQLとPostgreSQL:information_schemaを使用してカスタム型を効率的にリストする

          PostgreSQLクライアントに接続します。以下のSQLクエリを実行します。このクエリは、information_schema. typesテーブルからすべての行を返し、typetype列の値がcである行のみをフィルタリングします。 typetype列の値がcである行は、すべてカスタム型を表します。...


          データベースのセキュリティ強化!PostgreSQLで列をハッシュ化するベストプラクティス

          方法1:生成された列を使用するこの方法は、新しい列を作成し、その列に元の列のSHA-256ハッシュを自動的に生成します。この例では、your_table_nameという名前のテーブルに新しい列hash_columnが作成されます。your_column列のSHA-256ハッシュがhash_column列に16進数で格納されます。...


          PostgreSQL権限徹底解説:pg_user_grantable_rolesビューとpsqlコマンドを駆使してアクセス権限を詳細に把握

          以下では、PostgreSQL におけるユーザーのアクセス権限を確認する方法を、2 つの方法に分けて説明します。pg_user_grantable_roles ビューは、特定のユーザーに付与されているロールと、そのロールを通じて付与される権限に関する情報を提供します。このビューを使用するには、以下の SQL クエリを実行します。...


          GiSTインデックスで効率アップ! PostgreSQL除外制約「EXCLUDE USING gist (c WITH &&)」の仕組みと詳細解説

          今回取り上げる EXCLUDE USING gist (c WITH &&) は、除外制約の中でも GiST インデックス を利用して効率的な照合を実現するものです。この制約式は以下の要素から構成されています。EXCLUDE: 除外制約を定義することを示します。...