WindowsでPostgreSQL 5432ポートに接続できない!原因別の完全解決ガイド【2025年版】

Windows

「could not connect to server: Connection refused (0x0000274D/10061)」 「psql: error: connection to server at “localhost” (::1), port 5432 failed」 「pgAdmin4で接続できない…」

WindowsでPostgreSQLに接続できないエラー、本当にイライラしますよね。

実は、このエラーの原因は主に7つ。そして、98%は簡単な設定変更で解決できるんです。サービスの起動忘れ、ファイアウォール、設定ファイルのミス…原因さえ特定できれば、5分で解決可能!

この記事では、エラーの原因を素早く特定し、確実に解決する方法を、Windows環境に特化して解説します。


スポンサーリンク

まず確認!5秒でできる基本チェック

✅ チェック1:PostgreSQLサービスは動いている?

コマンドプロンプトで確認(最速)

# 管理者権限でコマンドプロンプトを開く
# Win + X → Windows PowerShell(管理者)

# サービスの状態確認
sc query postgresql-x64-16

# または、バージョンに応じて
sc query postgresql-x64-15
sc query postgresql-x64-14
sc query postgresql-x64-13

結果の見方:

STATE : 4  RUNNING    ← 正常(動作中)
STATE : 1  STOPPED    ← 停止中(これが原因!)

GUIで確認する方法

  1. Windows + Rservices.msc
  2. postgresql-x64-XXを探す(XXはバージョン)
  3. 状態を確認:
    • 実行中 → OK
    • 停止 → これが原因!

🚀 サービスを起動する3つの方法

方法1:コマンドで起動(推奨)

# 管理者権限で実行
net start postgresql-x64-16

# または
sc start postgresql-x64-16

# 成功メッセージ
"postgresql-x64-16 サービスは正常に開始されました。"

方法2:サービス画面から起動

  1. services.mscでPostgreSQLを右クリック
  2. **「開始」**をクリック
  3. 起動完了まで待つ(10-30秒)

方法3:pg_ctlコマンド

# PostgreSQLのbinディレクトリに移動
cd "C:\Program Files\PostgreSQL\16\bin"

# 起動
pg_ctl start -D "C:\Program Files\PostgreSQL\16\data"

【原因1】ポート5432が使われている

🔍 ポートの使用状況を確認

# 5432ポートを使用しているプロセスを確認
netstat -an | findstr :5432

# 詳細情報付き
netstat -ano | findstr :5432

# 結果例:
TCP    0.0.0.0:5432    0.0.0.0:0    LISTENING    12345
TCP    [::]:5432       [::]:*       LISTENING    12345

プロセスIDから実行ファイルを特定:

# PID 12345のプロセスを確認
tasklist | findstr 12345

# または PowerShell で
Get-Process -Id 12345 | Select-Object ProcessName, Path

💡 解決方法

別のPostgreSQLが動いている場合

# 既存のPostgreSQLを停止
net stop postgresql-x64-15  # 古いバージョン
net start postgresql-x64-16  # 新しいバージョンを起動

# または、ポート番号を変更(後述)

他のアプリが使用している場合

  1. そのアプリを停止
  2. または、PostgreSQLのポートを変更:
# postgresql.conf を編集
# 場所:C:\Program Files\PostgreSQL\16\data\postgresql.conf

port = 5433  # 5432から5433に変更

# サービス再起動
net stop postgresql-x64-16
net start postgresql-x64-16

【原因2】Windows Defenderファイアウォール

🛡️ ファイアウォールの設定確認

PowerShellで確認(管理者権限)

# PostgreSQL関連のファイアウォールルールを確認
Get-NetFirewallRule -DisplayName "*postgres*" | 
    Select-Object DisplayName, Enabled, Direction, Action

# ポート5432のルールを確認
Get-NetFirewallPortFilter | Where-Object {$_.LocalPort -eq 5432}

🔓 ファイアウォールに例外を追加

方法1:コマンドで追加(推奨)

# 管理者権限で実行
# インバウンドルール(受信)を追加
netsh advfirewall firewall add rule name="PostgreSQL (5432)" dir=in action=allow protocol=TCP localport=5432

# アウトバウンドルール(送信)も追加
netsh advfirewall firewall add rule name="PostgreSQL (5432)" dir=out action=allow protocol=TCP localport=5432

# プログラムベースのルール
netsh advfirewall firewall add rule name="PostgreSQL Server" dir=in action=allow program="C:\Program Files\PostgreSQL\16\bin\postgres.exe"

方法2:GUI で設定

  1. Windows セキュリティを開く
  2. ファイアウォールとネットワーク保護
  3. 詳細設定
  4. 受信の規則新しい規則
  5. ポートTCP5432
  6. 接続を許可する
  7. すべてのプロファイルにチェック
  8. 名前:「PostgreSQL 5432」

【原因3】postgresql.conf の設定ミス

📝 設定ファイルの場所と確認

# 設定ファイルの場所を確認
psql -U postgres -c "SHOW config_file"

# 通常の場所
C:\Program Files\PostgreSQL\16\data\postgresql.conf

🔧 必須の設定項目

listen_addresses の設定

# postgresql.conf を開く(メモ帳で編集可能)

# ❌ 間違い:コメントアウトされている
#listen_addresses = 'localhost'

# ✅ 正解:ローカル接続を許可
listen_addresses = 'localhost'

# ✅ すべてのIPから接続を許可(開発環境のみ)
listen_addresses = '*'

# ✅ 特定のIPのみ許可
listen_addresses = 'localhost,192.168.1.100'

ポート設定の確認

# ポート番号(デフォルト:5432)
port = 5432

# 最大接続数
max_connections = 100

# 共有メモリ(Windows特有の設定)
shared_buffers = 128MB

🔄 設定変更後の反映

# 必ずサービスを再起動
net stop postgresql-x64-16
net start postgresql-x64-16

# または設定のリロード(一部設定のみ)
psql -U postgres -c "SELECT pg_reload_conf();"

【原因4】pg_hba.conf の認証設定

🔐 認証設定ファイルの確認

# pg_hba.conf の場所
C:\Program Files\PostgreSQL\16\data\pg_hba.conf

✏️ 正しい認証設定

# pg_hba.conf の基本設定

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# ローカル接続(必須)
host    all             all             127.0.0.1/32            scram-sha-256
host    all             all             ::1/128                 scram-sha-256

# 同一ネットワークからの接続を許可
host    all             all             192.168.1.0/24          scram-sha-256

# 信頼する(パスワードなし)- 開発環境のみ
host    all             all             127.0.0.1/32            trust

# 特定ユーザーのみ許可
host    mydb            myuser          192.168.1.100/32        scram-sha-256

認証方式の種類:

  • trust:パスワードなし(危険)
  • md5:MD5暗号化(非推奨)
  • scram-sha-256:最新・推奨
  • reject:接続拒否

【原因5】アンチウイルスソフトの干渉

🦠 Windows Defender / アンチウイルスの例外設定

Windows Defender の除外設定

# PowerShell(管理者)で実行
# PostgreSQLフォルダを除外
Add-MpPreference -ExclusionPath "C:\Program Files\PostgreSQL"

# プロセスを除外
Add-MpPreference -ExclusionProcess "postgres.exe"
Add-MpPreference -ExclusionProcess "pg_ctl.exe"
Add-MpPreference -ExclusionProcess "psql.exe"

# ポートを除外(Windows Defender Firewall)
New-NetFirewallRule -DisplayName "PostgreSQL" -Direction Inbound -LocalPort 5432 -Protocol TCP -Action Allow

サードパーティ製アンチウイルス

共通の手順:

  1. アンチウイルスソフトの設定を開く
  2. 除外/例外リストに追加:
    • C:\Program Files\PostgreSQL\
    • C:\Program Files\PostgreSQL\16\data\
    • postgres.exe, psql.exe

【原因6】localhost の名前解決問題

🌐 hosts ファイルの確認

# hosts ファイルを確認
type C:\Windows\System32\drivers\etc\hosts

# 以下の行があるか確認
127.0.0.1       localhost
::1             localhost

hosts ファイルが壊れている場合:

# 管理者権限で修復
notepad C:\Windows\System32\drivers\etc\hosts

# 以下を追加
127.0.0.1       localhost
::1             localhost

🔧 IPv6 / IPv4 の問題

# IPv6を無効化して接続テスト
psql -h 127.0.0.1 -U postgres  # IPv4で明示的に接続

# IPv6で接続
psql -h ::1 -U postgres

# ホスト名で接続
psql -h localhost -U postgres

【原因7】環境変数とPath設定

🔤 環境変数の確認と設定

# 現在のPath確認
echo %PATH%

# PostgreSQL関連の環境変数
echo %PGDATA%
echo %PGPORT%
echo %PGHOST%
echo %PGUSER%

システム環境変数の設定

# 管理者権限で実行
setx /M PATH "%PATH%;C:\Program Files\PostgreSQL\16\bin"
setx /M PGDATA "C:\Program Files\PostgreSQL\16\data"
setx /M PGPORT "5432"
setx /M PGHOST "localhost"

トラブルシューティングツール

🔍 診断スクリプト

# PostgreSQL診断スクリプト(PowerShell)
Write-Host "=== PostgreSQL 診断開始 ===" -ForegroundColor Green

# 1. サービス状態
Write-Host "`n1. サービス状態:" -ForegroundColor Yellow
Get-Service -Name "postgresql*" | Format-Table Name, Status, StartType

# 2. ポート使用状況
Write-Host "`n2. ポート5432の状態:" -ForegroundColor Yellow
netstat -an | Select-String ":5432"

# 3. PostgreSQLプロセス
Write-Host "`n3. PostgreSQLプロセス:" -ForegroundColor Yellow
Get-Process | Where-Object {$_.ProcessName -like "*postgres*"} | Format-Table ProcessName, Id

# 4. ファイアウォール
Write-Host "`n4. ファイアウォールルール:" -ForegroundColor Yellow
Get-NetFirewallRule -DisplayName "*postgres*" | Select-Object DisplayName, Enabled

# 5. 接続テスト
Write-Host "`n5. 接続テスト:" -ForegroundColor Yellow
Test-NetConnection -ComputerName localhost -Port 5432

📋 ログファイルの確認

# PostgreSQLログの場所
C:\Program Files\PostgreSQL\16\data\log\

# 最新のログを確認
type "C:\Program Files\PostgreSQL\16\data\log\postgresql-2025-01-20_000000.log"

# エラーのみ抽出
findstr /i "error fatal" "C:\Program Files\PostgreSQL\16\data\log\*.log"

クライアント別の接続方法

🔌 psql コマンドライン

# 基本接続
psql -U postgres

# 詳細指定
psql -h localhost -p 5432 -U postgres -d postgres

# パスワードファイル使用
echo localhost:5432:*:postgres:yourpassword > %APPDATA%\postgresql\pgpass.conf
psql -U postgres

🎨 pgAdmin 4

接続設定:

  1. 新規サーバー追加
  2. 設定項目:
    • Name: Local PostgreSQL
    • Host: localhost (または 127.0.0.1)
    • Port: 5432
    • Username: postgres
    • Password: [設定したパスワード]

💻 プログラムからの接続

Python (psycopg2)

import psycopg2

try:
    conn = psycopg2.connect(
        host="localhost",
        port=5432,
        database="postgres",
        user="postgres",
        password="yourpassword"
    )
    print("接続成功!")
except Exception as e:
    print(f"接続失敗: {e}")

Node.js (pg)

const { Client } = require('pg');

const client = new Client({
    host: 'localhost',
    port: 5432,
    database: 'postgres',
    user: 'postgres',
    password: 'yourpassword'
});

client.connect()
    .then(() => console.log('接続成功!'))
    .catch(err => console.error('接続失敗:', err));

よくある質問と回答

Q:インストール直後なのに接続できません

A: インストール時に設定したパスワードを確認してください。また、インストール完了後にWindowsを再起動することで、環境変数が正しく反映されます。

Q:別のPCから接続したい

A: 以下の設定が必要です:

  1. postgresql.conf: listen_addresses = '*'
  2. pg_hba.conf: 該当IPアドレスの許可
  3. Windowsファイアウォール: 5432ポートを開放
  4. サービス再起動

Q:ポート5432は開いているのに接続できない

A: pg_hba.confの認証設定を確認してください。特に、IPv4(127.0.0.1)とIPv6(::1)の両方の設定が必要です。

Q:サービスが起動直後に停止する

A: イベントビューアーでエラーを確認してください:

eventvwr.msc → Windowsログ → アプリケーション

多くの場合、データディレクトリの権限問題か、共有メモリの設定ミスが原因です。


まとめ:PostgreSQL接続エラーを確実に解決!

WindowsでのPostgreSQL接続エラーは、原因を順番にチェックすれば必ず解決できます。

解決の優先順位:

  1. サービスが起動しているか確認(最も多い原因)
  2. ポート5432が使用可能か確認
  3. ファイアウォールの設定
  4. postgresql.conf の listen_addresses
  5. pg_hba.conf の認証設定
  6. アンチウイルスの除外設定
  7. 環境変数とPath設定

トラブル時のコマンド:

# これだけ覚えておけばOK
services.msc                    # サービス確認
netstat -an | findstr :5432     # ポート確認
net start postgresql-x64-16     # サービス起動

この記事の手順を順番に試せば、必ず接続できるようになります!

快適なPostgreSQL開発を! 🐘✨

コメント

タイトルとURLをコピーしました