「PostgreSQLに接続できない…ポート番号が違うのかな?」 「複数のPostgreSQLが動いていて、どれがどのポートか分からない」 「セキュリティのためにデフォルトポートを変更したい」
PostgreSQLのポート番号、普段は意識しないかもしれません。 でも、接続トラブルの原因の約30%はポート番号の設定ミスなんです。
デフォルトは「5432」ですが、 実は環境によって違うポートで動いていることがよくあります。
この記事では、PostgreSQLのポート番号を確認する全方法から、 変更方法、そしてトラブル解決まで、すべてお伝えします。
接続の問題を解決して、スムーズな開発環境を手に入れましょう!
1. PostgreSQLのポート番号、基本を理解しよう

🔌 ポート番号とは?
ポート番号は、コンピュータの「部屋番号」のようなものです。
建物(サーバー) = IPアドレス
部屋番号 = ポート番号
PostgreSQL = 5432号室(デフォルト)
よく使われるポート番号:
- PostgreSQL: 5432(デフォルト)
- MySQL: 3306
- MongoDB: 27017
- Redis: 6379
- HTTP: 80
- HTTPS: 443
🔌 なぜポート番号の確認が必要?
主な理由:
- 接続設定の確認
- アプリケーションの接続文字列設定
- データベースクライアントの設定
- 複数インスタンスの管理
- 開発用:5432
- テスト用:5433
- 本番用:5434
- セキュリティ対策
- デフォルトポートは攻撃対象になりやすい
- カスタムポートで防御力UP
- ファイアウォール設定
- 正しいポートを開放する必要
2. 【即効】ポート番号を確認する5つの方法
方法1️⃣ psqlコマンドで確認(最も簡単)
# PostgreSQLに接続中の場合
psql -U postgres -c "SHOW port;"
# 結果
# port
# ------
# 5432
接続していない場合:
# 接続しながら確認
psql -U postgres -d postgres -c "SELECT current_setting('port');"
方法2️⃣ 設定ファイル(postgresql.conf)で確認
Linux/macOSの場合:
# 設定ファイルの場所を探す
sudo find / -name "postgresql.conf" 2>/dev/null
# よくある場所
/etc/postgresql/14/main/postgresql.conf # Ubuntu/Debian
/var/lib/pgsql/14/data/postgresql.conf # CentOS/RHEL
/usr/local/var/postgres/postgresql.conf # macOS Homebrew
設定を確認:
# ポート設定を抽出
grep "^port" /path/to/postgresql.conf
# 結果例
port = 5432 # (change requires restart)
Windowsの場合:
# PowerShellで確認
Get-Content "C:\Program Files\PostgreSQL\14\data\postgresql.conf" | Select-String "^port"
方法3️⃣ システムプロセスから確認
Linux/macOS:
# 実行中のPostgreSQLプロセスを確認
sudo netstat -tulpn | grep postgres
# または
sudo ss -tulpn | grep postgres
# macOSの場合
sudo lsof -i -P | grep postgres
# 結果例
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 1234/postgres
Windows:
# コマンドプロンプトで確認
netstat -an | findstr :543
# PowerShellで詳細確認
Get-NetTCPConnection | Where-Object {$_.LocalPort -like "543*"}
方法4️⃣ pg_settingsビューで確認
-- PostgreSQLに接続後
SELECT name, setting, unit, category, short_desc
FROM pg_settings
WHERE name = 'port';
-- より詳細な情報
SELECT
name,
setting AS current_value,
boot_val AS default_value,
reset_val AS session_value,
sourcefile,
sourceline
FROM pg_settings
WHERE name = 'port';
方法5️⃣ pgAdminやDBeaverなどのGUIツールで確認
pgAdmin4での確認:
- サーバーを右クリック
- 「Properties」を選択
- 「Connection」タブを確認
- 「Port」フィールドに表示
DBeaverでの確認:
- 接続を右クリック
- 「Edit Connection」を選択
- 「Main」タブの「Port」を確認
3. 複数のPostgreSQLインスタンスがある場合
🔍 全インスタンスのポート番号を一覧表示
# すべてのPostgreSQLプロセスとポートを表示
sudo ps aux | grep postgres | grep -- "-p"
# より詳細な情報(Linux)
sudo ss -tulpn | grep postgres | awk '{print $5}' | cut -d: -f2 | sort -u
# プロセスとポートの対応表を作成
for pid in $(pgrep postgres); do
port=$(sudo lsof -Pan -p $pid -i | grep LISTEN | awk '{print $9}' | cut -d: -f2)
if [ ! -z "$port" ]; then
echo "PID: $pid, Port: $port"
fi
done
🔍 Dockerコンテナの場合
# Dockerで動いているPostgreSQLのポート確認
docker ps --filter "ancestor=postgres" --format "table {{.Names}}\t{{.Ports}}"
# 特定のコンテナの詳細
docker inspect postgres_container | grep -A 10 "PortBindings"
# docker-compose.ymlの確認
cat docker-compose.yml | grep -A 2 postgres
docker-compose.yml例:
services:
postgres_dev:
image: postgres:14
ports:
- "5432:5432" # ホスト:コンテナ
postgres_test:
image: postgres:14
ports:
- "5433:5432" # 別ポートにマッピング
4. ポート番号を変更する方法

🔧 postgresql.confを編集
手順1:設定ファイルを編集
# バックアップを作成
sudo cp /path/to/postgresql.conf /path/to/postgresql.conf.backup
# 編集
sudo nano /path/to/postgresql.conf
変更箇所:
# デフォルト
#port = 5432
# 変更後(例:5433に変更)
port = 5433
# 特定のIPアドレスにバインド
#listen_addresses = 'localhost'
listen_addresses = '*' # すべてのIPアドレスで待ち受け
手順2:PostgreSQLを再起動
# Ubuntu/Debian
sudo systemctl restart postgresql
# CentOS/RHEL
sudo systemctl restart postgresql-14
# macOS
brew services restart postgresql
# Windows(管理者権限で)
net stop postgresql-x64-14
net start postgresql-x64-14
🔧 一時的な変更(テスト用)
# コマンドラインオプションで起動
postgres -D /path/to/data -p 5433
# pg_ctlを使う場合
pg_ctl -D /path/to/data -o "-p 5433" start
🔧 環境変数での指定
# 環境変数を設定
export PGPORT=5433
# この環境変数を使ってpsqlが接続
psql -U postgres # 自動的に5433ポートに接続
5. 接続文字列でのポート指定
🔗 各種接続方法でのポート指定
psqlコマンド:
# -p オプションで指定
psql -h localhost -p 5433 -U postgres -d mydb
# 接続文字列形式
psql "postgresql://postgres:password@localhost:5433/mydb"
プログラミング言語での接続:
Python (psycopg2):
import psycopg2
# 方法1:個別パラメータ
conn = psycopg2.connect(
host="localhost",
port=5433, # ポート指定
database="mydb",
user="postgres",
password="password"
)
# 方法2:接続文字列
conn = psycopg2.connect(
"postgresql://postgres:password@localhost:5433/mydb"
)
Node.js (pg):
const { Pool } = require('pg');
// 方法1:設定オブジェクト
const pool = new Pool({
host: 'localhost',
port: 5433, // ポート指定
database: 'mydb',
user: 'postgres',
password: 'password'
});
// 方法2:接続文字列
const pool = new Pool({
connectionString: 'postgresql://postgres:password@localhost:5433/mydb'
});
Java (JDBC):
// JDBC URL形式
String url = "jdbc:postgresql://localhost:5433/mydb";
Properties props = new Properties();
props.setProperty("user", "postgres");
props.setProperty("password", "password");
Connection conn = DriverManager.getConnection(url, props);
Ruby (pg gem):
require 'pg'
# 接続
conn = PG.connect(
host: 'localhost',
port: 5433, # ポート指定
dbname: 'mydb',
user: 'postgres',
password: 'password'
)
6. ファイアウォールとポート開放
🛡️ Linux(Ubuntu/Debian)
ufw(Uncomplicated Firewall):
# 現在の状態確認
sudo ufw status verbose
# PostgreSQLのデフォルトポートを開放
sudo ufw allow 5432/tcp
# 特定のIPアドレスからのみ許可
sudo ufw allow from 192.168.1.0/24 to any port 5432
# カスタムポートの場合
sudo ufw allow 5433/tcp
# 設定を有効化
sudo ufw enable
iptables:
# ポート5432を開放
sudo iptables -A INPUT -p tcp --dport 5432 -j ACCEPT
# 特定のIPからのみ
sudo iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 5432 -j ACCEPT
# 設定を保存
sudo iptables-save > /etc/iptables/rules.v4
🛡️ Linux(CentOS/RHEL)
firewalld:
# PostgreSQLサービスを追加
sudo firewall-cmd --permanent --add-service=postgresql
# カスタムポートの場合
sudo firewall-cmd --permanent --add-port=5433/tcp
# 設定を再読み込み
sudo firewall-cmd --reload
# 確認
sudo firewall-cmd --list-all
🛡️ Windows
Windows Defender ファイアウォール:
# PowerShell(管理者権限)で実行
# インバウンドルールを追加
New-NetFirewallRule -DisplayName "PostgreSQL" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 5432 `
-Action Allow
# 特定のプログラムに対して許可
New-NetFirewallRule -DisplayName "PostgreSQL Server" `
-Direction Inbound `
-Program "C:\Program Files\PostgreSQL\14\bin\postgres.exe" `
-Action Allow
🛡️ macOS
# pfctl(Packet Filter)の設定
echo "pass in proto tcp from any to any port 5432" | sudo tee -a /etc/pf.conf
# 設定を有効化
sudo pfctl -e -f /etc/pf.conf
7. トラブルシューティング
❌ エラー:Connection refused
原因と対策:
# 1. PostgreSQLが起動しているか確認
sudo systemctl status postgresql
# 2. ポートが正しいか確認
psql -U postgres -c "SHOW port;"
# 3. プロセスがポートをリッスンしているか
sudo netstat -tulpn | grep 5432
# 4. postgresql.confのlisten_addressesを確認
grep "listen_addresses" /path/to/postgresql.conf
# localhost のみか、* になっているか確認
❌ エラー:Port 5432 already in use
対処法:
# 1. 使用中のプロセスを特定
sudo lsof -i :5432
# 2. プロセスを確認
ps aux | grep [プロセスID]
# 3. 必要に応じて停止
sudo kill -15 [プロセスID]
# 4. 別のポートを使用
postgres -D /path/to/data -p 5433
❌ 複数バージョンの競合
# インストール済みのPostgreSQLを確認
# Ubuntu/Debian
dpkg -l | grep postgresql
# CentOS/RHEL
rpm -qa | grep postgresql
# 各バージョンのポート確認
for version in 12 13 14; do
echo "PostgreSQL $version:"
sudo grep "^port" /etc/postgresql/$version/main/postgresql.conf 2>/dev/null
done
8. セキュリティのベストプラクティス

🔒 ポート番号変更によるセキュリティ強化
# 1. 非標準ポートを使用(例:15432)
port = 15432
# 2. 特定のIPアドレスのみ許可
listen_addresses = '192.168.1.100,127.0.0.1'
# 3. pg_hba.confで接続元を制限
# IPv4 local connections:
host all all 192.168.1.0/24 scram-sha-256
host all all 127.0.0.1/32 scram-sha-256
🔒 ポートスキャン対策
# fail2banの設定(Linux)
# /etc/fail2ban/jail.local
[postgresql]
enabled = true port = 5432 filter = postgresql logpath = /var/log/postgresql/postgresql-*.log maxretry = 3 bantime = 3600
🔒 SSL/TLS接続の強制
# postgresql.conf
ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
ssl_ca_file = 'root.crt'
# pg_hba.conf
# SSL接続のみ許可
hostssl all all 0.0.0.0/0 scram-sha-256
9. 便利なスクリプトとツール
🛠️ ポート確認スクリプト
#!/bin/bash
# check_pg_ports.sh - PostgreSQLの全ポートを確認
echo "=== PostgreSQL Port Check ==="
echo ""
# 設定ファイルから確認
echo "1. Configuration files:"
for conf in $(find /etc /var /usr -name "postgresql.conf" 2>/dev/null); do
port=$(grep "^port" "$conf" 2>/dev/null | cut -d= -f2 | tr -d ' ')
echo " Config: $conf"
echo " Port: ${port:-5432 (default)}"
done
echo ""
echo "2. Running processes:"
# 実行中のプロセス確認
if command -v ss &> /dev/null; then
sudo ss -tulpn | grep postgres
elif command -v netstat &> /dev/null; then
sudo netstat -tulpn | grep postgres
fi
echo ""
echo "3. Docker containers:"
docker ps --filter "ancestor=postgres" --format "table {{.Names}}\t{{.Ports}}" 2>/dev/null || echo " No Docker containers found"
🛠️ ポート変更自動化スクリプト
#!/bin/bash
# change_pg_port.sh - PostgreSQLのポート変更を自動化
OLD_PORT=${1:-5432}
NEW_PORT=${2:-5433}
PG_VERSION=${3:-14}
echo "Changing PostgreSQL port from $OLD_PORT to $NEW_PORT..."
# バックアップ作成
sudo cp /etc/postgresql/$PG_VERSION/main/postgresql.conf{,.backup}
# ポート変更
sudo sed -i "s/port = $OLD_PORT/port = $NEW_PORT/g" /etc/postgresql/$PG_VERSION/main/postgresql.conf
# PostgreSQL再起動
sudo systemctl restart postgresql
# 確認
sleep 2
if sudo netstat -tulpn | grep -q ":$NEW_PORT"; then
echo "✓ Port successfully changed to $NEW_PORT"
else
echo "✗ Failed to change port"
# ロールバック
sudo cp /etc/postgresql/$PG_VERSION/main/postgresql.conf{.backup,}
sudo systemctl restart postgresql
fi
🛠️ 接続テストツール
#!/usr/bin/env python3
# test_pg_connection.py - PostgreSQL接続テスト
import sys
import psycopg2
from psycopg2 import OperationalError
def test_connection(host, port, database, user, password):
try:
conn = psycopg2.connect(
host=host,
port=port,
database=database,
user=user,
password=password,
connect_timeout=3
)
cursor = conn.cursor()
cursor.execute("SELECT version();")
version = cursor.fetchone()[0]
print(f"✓ Successfully connected to port {port}")
print(f" PostgreSQL version: {version}")
cursor.close()
conn.close()
return True
except OperationalError as e:
print(f"✗ Failed to connect to port {port}")
print(f" Error: {e}")
return False
if __name__ == "__main__":
# テスト対象のポート
ports = [5432, 5433, 5434]
for port in ports:
print(f"\nTesting port {port}...")
test_connection(
host="localhost",
port=port,
database="postgres",
user="postgres",
password="password"
)
10. よくある質問(FAQ)
❓ デフォルトポート5432を変更すべき?
答え:環境によります
変更を推奨する場合:
- インターネットに公開されるサーバー
- 複数のPostgreSQLインスタンス運用
- セキュリティ要件が厳しい環境
変更不要な場合:
- ローカル開発環境
- プライベートネットワーク内のみ
- Dockerコンテナ内部
❓ ポート番号は何番を使えばいい?
答え:用途別の推奨番号
開発環境: 5432(デフォルト)
テスト環境: 5433
ステージング: 5434
本番環境: 15432(5桁の非標準ポート)
複数バージョン運用:
PostgreSQL 12: 5432
PostgreSQL 13: 5433
PostgreSQL 14: 5434
PostgreSQL 15: 5435
❓ Dockerでポートが競合する
答え:ホスト側のポートを変更
# docker-compose.yml
services:
postgres:
image: postgres:14
ports:
- "15432:5432" # ホスト:コンテナ
# コンテナ内部は5432のまま
# ホスト側は15432でアクセス
❓ AWSやGCPでのポート設定は?
答え:セキュリティグループで制御
AWS RDS:
- デフォルト:5432
- セキュリティグループでインバウンドルール設定
- カスタムポート可能(1150-65535)
Google Cloud SQL:
- デフォルト:5432
- VPCファイアウォールルールで制御
- プライベートIPの使用を推奨
❓ pgBouncerやPgPoolを使う場合は?
答え:プロキシのポートを考慮
クライアント → pgBouncer(6432) → PostgreSQL(5432)
クライアント → PgPool(9999) → PostgreSQL(5432)
まとめ:ポート番号を制する者は接続を制す!
PostgreSQLのポート番号確認と設定、思った以上に重要ですよね。 適切に管理すれば、接続トラブルを防ぎ、セキュリティも向上します。
重要ポイントのおさらい:
✅ 確認方法は複数ある
- psqlコマンド:
SHOW port;
- 設定ファイル:postgresql.conf
- プロセス確認:netstat, ss, lsof
✅ デフォルトは5432
- 変更する場合は再起動が必要
- listen_addressesも忘れずに確認
✅ セキュリティを考慮
- 本番環境では非標準ポート推奨
- ファイアウォール設定を忘れずに
- 必要最小限のIPからのみ許可
✅ トラブル時の確認順序
- PostgreSQLが起動しているか
- ポート番号が正しいか
- ファイアウォールが開いているか
- 接続文字列が正しいか
チェックリスト:
- [ ] 現在のポート番号を確認した
- [ ] postgresql.confの場所を把握した
- [ ] ファイアウォール設定を確認した
- [ ] 接続文字列を更新した
- [ ] バックアップを作成した
🚀 次のステップ
今すぐやるべきこと:
psql -c "SHOW port;"
で現在のポート確認netstat
やss
でリッスン状態確認- 接続文字列の見直し
セキュリティ強化のために:
- 非標準ポートへの変更を検討
- SSL/TLS接続の設定
- pg_hba.confでアクセス制限
この記事が、PostgreSQLのポート管理と 接続トラブル解決に役立つことを願っています!
正確なポート設定で、安定した接続環境を構築しましょう!
コメント