「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で確認する方法
- Windows + R → services.msc
- postgresql-x64-XXを探す(XXはバージョン)
- 状態を確認:
- 実行中 → OK
- 停止 → これが原因!
🚀 サービスを起動する3つの方法
方法1:コマンドで起動(推奨)
# 管理者権限で実行
net start postgresql-x64-16
# または
sc start postgresql-x64-16
# 成功メッセージ
"postgresql-x64-16 サービスは正常に開始されました。"
方法2:サービス画面から起動
- services.mscでPostgreSQLを右クリック
- **「開始」**をクリック
- 起動完了まで待つ(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 # 新しいバージョンを起動
# または、ポート番号を変更(後述)
他のアプリが使用している場合
- そのアプリを停止
- または、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 で設定
- Windows セキュリティを開く
- ファイアウォールとネットワーク保護
- 詳細設定
- 受信の規則 → 新しい規則
- ポート → TCP → 5432
- 接続を許可する
- すべてのプロファイルにチェック
- 名前:「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
サードパーティ製アンチウイルス
共通の手順:
- アンチウイルスソフトの設定を開く
- 除外/例外リストに追加:
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
接続設定:
- 新規サーバー追加
- 設定項目:
- 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: 以下の設定が必要です:
- postgresql.conf:
listen_addresses = '*'
- pg_hba.conf: 該当IPアドレスの許可
- Windowsファイアウォール: 5432ポートを開放
- サービス再起動
Q:ポート5432は開いているのに接続できない
A: pg_hba.confの認証設定を確認してください。特に、IPv4(127.0.0.1)とIPv6(::1)の両方の設定が必要です。
Q:サービスが起動直後に停止する
A: イベントビューアーでエラーを確認してください:
eventvwr.msc → Windowsログ → アプリケーション
多くの場合、データディレクトリの権限問題か、共有メモリの設定ミスが原因です。
まとめ:PostgreSQL接続エラーを確実に解決!
WindowsでのPostgreSQL接続エラーは、原因を順番にチェックすれば必ず解決できます。
解決の優先順位:
- サービスが起動しているか確認(最も多い原因)
- ポート5432が使用可能か確認
- ファイアウォールの設定
- postgresql.conf の listen_addresses
- pg_hba.conf の認証設定
- アンチウイルスの除外設定
- 環境変数とPath設定
トラブル時のコマンド:
# これだけ覚えておけばOK
services.msc # サービス確認
netstat -an | findstr :5432 # ポート確認
net start postgresql-x64-16 # サービス起動
この記事の手順を順番に試せば、必ず接続できるようになります!
快適なPostgreSQL開発を! 🐘✨
コメント