PostgreSQL ใช้ไม่ได้บน Windows 10? วิธีแก้ Service ไม่ทำงาน เชื่อมต่อไม่ได้ Port 5432 ชน และ Password ผิด
หากคุณใช้ PostgreSQL บน Windows 10 แล้วพบว่าเซิร์ฟเวอร์ฐานข้อมูลเปิดไม่ขึ้น เชื่อมต่อผ่าน pgAdmin ไม่ได้ ขึ้นข้อความ Connection refused, Password authentication failed, พอร์ต 5432 ถูกใช้งาน หรือ PostgreSQL Service หยุดทำงาน ปัญหาเหล่านี้มักเกิดจากบริการฐานข้อมูล ไฟล์ postgresql.conf, การตั้งค่า pg_hba.conf, รหัสผ่านผู้ใช้ หรือพอร์ตชนกับโปรแกรมอื่น
บทความนี้รวบรวมวิธีแก้ PostgreSQL ใช้ไม่ได้บน Windows 10 แบบเป็นขั้นตอน เหมาะสำหรับผู้ที่ใช้ PostgreSQL Server, pgAdmin, PHP, Python, Node.js และระบบพัฒนาเว็บไซต์ พร้อมจัดรูปแบบให้อ่านง่ายสำหรับ Blogspot
PostgreSQL คืออะไร
PostgreSQL เป็นระบบจัดการฐานข้อมูลเชิงสัมพันธ์แบบโอเพนซอร์สที่มีความสามารถสูง
สามารถนำไปใช้กับงาน เช่น
Web Application
ระบบสมาชิก
ระบบหลังบ้าน
REST API
ระบบวิเคราะห์ข้อมูล
Django
Laravel
Node.js
Java Application
ระบบภายในองค์กร
PostgreSQL รองรับข้อมูลขนาดใหญ่ Transaction, JSON, Stored Procedure และฟังก์ชันขั้นสูงจำนวนมาก
อาการที่พบบ่อย
PostgreSQL เปิดไม่ขึ้น
PostgreSQL Service หยุดทำงาน
pgAdmin เชื่อมต่อไม่ได้
Connection refused
Password authentication failed
Port 5432 ถูกใช้งาน
Database ไม่แสดงใน pgAdmin
psql ใช้งานไม่ได้
เว็บไซต์เชื่อมต่อฐานข้อมูลไม่ได้
PostgreSQL Start แล้วหยุดทันที
Import ฐานข้อมูลไม่สำเร็จ
โปรแกรมทำงานช้าผิดปกติ
สาเหตุที่ทำให้ PostgreSQL มีปัญหา
สาเหตุที่พบได้บ่อย ได้แก่
PostgreSQL Service ไม่ทำงาน
พอร์ต 5432 ถูกโปรแกรมอื่นใช้
รหัสผ่านของผู้ใช้
postgresไม่ถูกต้องไฟล์
postgresql.confผิดพลาดไฟล์
pg_hba.confกำหนดสิทธิ์ไม่ถูกต้องData Directory มีปัญหา
ติดตั้ง PostgreSQL หลายเวอร์ชัน
Firewall บล็อกการเชื่อมต่อ
พื้นที่ว่างของไดรฟ์ไม่เพียงพอ
สิทธิ์ของโฟลเดอร์ฐานข้อมูลไม่ถูกต้อง
เครื่องปิดกะทันหันขณะกำลังเขียนข้อมูล
วิธีแก้ PostgreSQL ใช้ไม่ได้บน Windows 10
① รีสตาร์ต Windows
รีสตาร์ตคอมพิวเตอร์ก่อนหนึ่งครั้ง
จากนั้นทดลองเปิด PostgreSQL หรือ pgAdmin ใหม่
วิธีนี้ช่วยแก้ปัญหา Service และ Process ค้างได้ในบางกรณี
② ตรวจสอบ PostgreSQL Service
กด
Win + R
พิมพ์
services.msc
กด Enter
ค้นหาบริการชื่อใกล้เคียง เช่น
postgresql-x64-16
postgresql-x64-15
postgresql-x64-14
ตรวจสอบว่า Status เป็น
Running
หากหยุดทำงาน ให้คลิกขวาแล้วเลือก
Start
③ รีสตาร์ต PostgreSQL Service
หาก Service ทำงานอยู่แต่เชื่อมต่อไม่ได้
คลิกขวาที่ PostgreSQL Service
เลือก
Restart
จากนั้นทดลองเชื่อมต่อใหม่
④ ตั้งค่า Startup Type
ดับเบิลคลิก PostgreSQL Service
ตั้งค่า
Startup type
เป็น
Automatic
เพื่อให้ฐานข้อมูลเริ่มทำงานพร้อม Windows
⑤ ตรวจสอบชื่อ Service ผ่าน Command Prompt
เปิด Command Prompt แบบผู้ดูแลระบบ
รัน
sc query type= service | findstr /I "postgres"
คำสั่งนี้จะแสดง PostgreSQL Service ที่ติดตั้งอยู่ในเครื่อง
⑥ เริ่ม Service ผ่านคำสั่ง
หากชื่อ Service คือ postgresql-x64-16 ให้รัน
net start postgresql-x64-16
หากต้องการหยุด Service ใช้
net stop postgresql-x64-16
ควรเปลี่ยนชื่อให้ตรงกับเวอร์ชันที่ติดตั้งจริง
⑦ ตรวจสอบพอร์ต 5432
PostgreSQL ใช้พอร์ต
5432
เป็นค่าเริ่มต้น
เปิด Command Prompt แล้วรัน
netstat -ano | findstr :5432
หากมี Process อื่นใช้พอร์ตนี้ PostgreSQL อาจเปิดไม่ได้หรือเชื่อมต่อไปผิด Server
⑧ ตรวจสอบ Process ที่ใช้พอร์ต
นำหมายเลข PID จากคำสั่ง netstat ไปค้นหาใน
Task Manager > Details
ตรวจสอบว่า Process ใดกำลังใช้พอร์ต 5432
หากเป็น PostgreSQL คนละเวอร์ชัน อาจเกิดจากติดตั้งหลาย Instance
⑨ ตรวจสอบ PostgreSQL หลายเวอร์ชัน
หากติดตั้ง PostgreSQL หลายเวอร์ชัน เช่น 14, 15 และ 16 พร้อมกัน แต่ละ Service ต้องใช้
พอร์ตต่างกัน
Data Directory ต่างกัน
ชื่อ Service ต่างกัน
ควรตรวจสอบว่า pgAdmin และโปรแกรมกำลังเชื่อมต่อ Instance ที่ถูกต้อง
⑩ เปลี่ยนพอร์ต PostgreSQL
เปิดไฟล์
postgresql.conf
ค้นหา
port = 5432
เปลี่ยนเป็น
port = 5433
จากนั้นรีสตาร์ต PostgreSQL Service
โปรแกรมทั้งหมดที่เชื่อมต่อฐานข้อมูลต้องเปลี่ยนพอร์ตตามด้วย
⑪ ตรวจสอบไฟล์ postgresql.conf
ไฟล์นี้เป็นไฟล์ตั้งค่าหลักของ PostgreSQL
ค่าที่ควรตรวจสอบ ได้แก่
listen_addresses = 'localhost'
port = 5432
max_connections = 100
ตรวจสอบว่า
ไม่มีเครื่องหมายผิดตำแหน่ง
ไม่มีค่าซ้ำกัน
Port ถูกต้อง
Path ที่กำหนดมีอยู่จริง
ควรสำรองไฟล์ก่อนแก้ไขทุกครั้ง
⑫ ตรวจสอบไฟล์ pg_hba.conf
ไฟล์ pg_hba.conf ใช้กำหนดว่าใครสามารถเชื่อมต่อ PostgreSQL ได้
ตัวอย่างสำหรับการเชื่อมต่อภายในเครื่อง
host all all 127.0.0.1/32 scram-sha-256
และ IPv6
host all all ::1/128 scram-sha-256
หากกำหนดผิด PostgreSQL อาจปฏิเสธการเชื่อมต่อ แม้ Username และ Password ถูกต้อง
⑬ รีสตาร์ต Service หลังแก้ Config
หลังแก้ไข
postgresql.confpg_hba.conf
ต้องรีสตาร์ต PostgreSQL Service ทุกครั้ง
มิฉะนั้นค่าที่แก้จะยังไม่ถูกนำมาใช้
⑭ ตรวจสอบ Data Directory
Data Directory เป็นตำแหน่งเก็บฐานข้อมูลทั้งหมด
ตรวจสอบว่า
โฟลเดอร์ยังอยู่
ไฟล์ไม่ถูกลบ
มีพื้นที่ว่างเพียงพอ
บัญชี Service มีสิทธิ์เข้าถึง
Antivirus ไม่ได้กักกันไฟล์
ไม่ได้ย้ายโฟลเดอร์โดยไม่แก้ Service
ไม่ควรลบไฟล์ภายใน Data Directory ด้วยตนเอง
⑮ ตรวจสอบ PostgreSQL Log
หาก Service Start แล้วหยุดทันที ให้ตรวจสอบ Log ภายในโฟลเดอร์ เช่น
log
pg_log
หรือดูตำแหน่งจาก postgresql.conf
Log มักระบุสาเหตุ เช่น
Port ถูกใช้งาน
Config ผิด
Permission ไม่ถูกต้อง
Data Directory เสียหาย
Recovery ไม่สำเร็จ
ไดรฟ์เต็ม
⑯ ตรวจสอบพื้นที่ว่างของไดรฟ์
PostgreSQL ต้องใช้พื้นที่สำหรับ
Database
WAL
Temporary Files
Index
Log
Backup
หากไดรฟ์ใกล้เต็ม PostgreSQL อาจหยุดทำงานหรือไม่สามารถบันทึกข้อมูลได้
⑰ ทดสอบเชื่อมต่อผ่าน psql
เปิด Command Prompt
รัน
psql -U postgres
หากกำหนดพอร์ตเอง ใช้
psql -U postgres -p 5432
จากนั้นใส่รหัสผ่าน
หากเชื่อมต่อได้ แสดงว่า Server ทำงาน แต่ pgAdmin หรือโปรแกรมอื่นอาจตั้งค่าผิด
⑱ แก้ psql is not recognized
หากเรียกคำสั่ง psql ไม่ได้ ให้เพิ่มโฟลเดอร์ bin ของ PostgreSQL ลงใน PATH
ตัวอย่าง
C:\Program Files\PostgreSQL\16\bin
จากนั้นปิดและเปิด Command Prompt ใหม่
⑲ ตรวจสอบตำแหน่ง psql
รัน
where psql
หากพบหลายตำแหน่ง อาจมี PostgreSQL Client หลายเวอร์ชัน
ควรจัดลำดับ PATH ให้เวอร์ชันที่ต้องการอยู่ด้านบน
⑳ แก้ Password authentication failed
ข้อความ
password authentication failed for user
มักเกิดจาก
Username ผิด
Password ผิด
เชื่อมต่อผิด Server
Port ผิด
วิธี Authentication ไม่ตรงกับ Client
ผู้ใช้ไม่มีอยู่ในฐานข้อมูล
ควรตรวจสอบ Host, Port, Username และ Database ก่อนรีเซ็ตรหัสผ่าน
㉑ ตรวจสอบผู้ใช้ postgres
ผู้ใช้เริ่มต้นมักชื่อ
postgres
แต่บางเครื่องอาจสร้างผู้ใช้อื่นไว้แทน
ใน pgAdmin ควรตรวจสอบค่า
Host name/address
Port
Maintenance database
Username
Password
ให้ตรงกับ Server จริง
㉒ ตรวจสอบ pgAdmin
หาก pgAdmin เปิดได้แต่เชื่อมต่อไม่ได้
คลิกขวาที่ Server
เลือก
Properties
ตรวจสอบ
Host: 127.0.0.1
Port: 5432
Maintenance database: postgres
Username: postgres
จากนั้นทดลองเชื่อมต่อใหม่
㉓ ลบรหัสผ่านที่จำผิดใน pgAdmin
หาก pgAdmin บันทึกรหัสผ่านเก่าไว้
ให้แก้ Connection หรือลบ Server Registration แล้วเพิ่มใหม่
จากนั้นใส่รหัสผ่านที่ถูกต้อง
㉔ ใช้ 127.0.0.1 แทน localhost
บางกรณี localhost อาจ Resolve ไปยัง IPv6 หรือการตั้งค่าที่แตกต่างกัน
ทดลองใช้
127.0.0.1
แทน localhost
แล้วเชื่อมต่อใหม่
㉕ ตรวจสอบ Listen Address
ใน postgresql.conf ตรวจสอบ
listen_addresses = 'localhost'
หากต้องการเชื่อมต่อจากเครื่องอื่น อาจกำหนด
listen_addresses = '*'
แต่ต้องตั้งค่า pg_hba.conf และ Firewall อย่างปลอดภัย
ไม่ควรเปิดให้ทุกเครือข่ายเชื่อมต่อโดยไม่มีข้อจำกัด
㉖ ตรวจสอบ Windows Firewall
หากเชื่อมต่อจากเครื่องอื่นไม่ได้ ให้ตรวจสอบว่า Firewall อนุญาตพอร์ต PostgreSQL แล้ว
ควรเปิดเฉพาะ
เครือข่ายภายใน
IP ที่จำเป็น
พอร์ตที่ใช้งานจริง
ไม่ควรเปิดพอร์ต 5432 สู่ Internet โดยตรง
㉗ ตรวจสอบ Antivirus
Antivirus อาจบล็อก
postgres.exepg_ctl.exepsql.exeData Directory
Log Directory
ตรวจสอบประวัติการกักกัน และอนุญาตเฉพาะไฟล์ที่มั่นใจว่าเป็นของ PostgreSQL จริง
㉘ ตรวจสอบสิทธิ์โฟลเดอร์
บัญชี Windows ที่ PostgreSQL Service ใช้งานต้องมีสิทธิ์อ่านและเขียนใน
Data Directory
Log Directory
Backup Directory
Temporary Directory
หากย้าย Data Directory ต้องกำหนด Permission ใหม่
㉙ ตรวจสอบ Database ที่ต้องการเชื่อมต่อ
หากขึ้นข้อความ
database does not exist
ให้ตรวจสอบชื่อ Database
สามารถดูรายการฐานข้อมูลผ่าน psql ด้วย
\l
หรือใน pgAdmin
㉚ ตรวจสอบ Schema และ Table
หากเชื่อมต่อได้แต่หา Table ไม่เจอ ให้ตรวจสอบว่าอยู่ใน
Database ถูกตัว
Schema ถูกตัว
Search Path ถูกต้อง
ใน PostgreSQL Table อาจอยู่ใน Schema อื่นที่ไม่ใช่ public
㉛ ตรวจสอบสิทธิ์ของผู้ใช้
ผู้ใช้อาจเชื่อมต่อได้แต่ไม่มีสิทธิ์อ่าน Table
สามารถตรวจสอบ Role และสิทธิ์ผ่าน pgAdmin หรือคำสั่ง SQL
ควรให้สิทธิ์เท่าที่จำเป็น ไม่ควรใช้ Superuser กับแอปพลิเคชันทั่วไป
㉜ Import ฐานข้อมูลด้วย psql
ตัวอย่าง Import ไฟล์ SQL
psql -U postgres -d ชื่อฐานข้อมูล -f backup.sql
ควรสร้าง Database ปลายทางก่อน และตรวจสอบ Encoding ของไฟล์
㉝ Export ฐานข้อมูลด้วย pg_dump
ตัวอย่าง
pg_dump -U postgres -d ชื่อฐานข้อมูล -f backup.sql
หากต้องการ Custom Format ใช้
pg_dump -U postgres -F c -d ชื่อฐานข้อมูล -f backup.dump
ควรตรวจสอบว่าไฟล์ Backup ถูกสร้างสำเร็จก่อนลบข้อมูลต้นฉบับ
㉞ Restore ไฟล์ Custom Format
ใช้คำสั่ง
pg_restore -U postgres -d ชื่อฐานข้อมูล backup.dump
ควรตรวจสอบ Version ของ pg_restore ให้เหมาะกับไฟล์ Backup
㉟ ตรวจสอบ Encoding
หากภาษาไทยแสดงผิด ให้ตรวจสอบ
Database Encoding
Client Encoding
ไฟล์ SQL
โปรแกรมที่เชื่อมต่อ
สามารถตรวจสอบ Database Encoding ผ่านคำสั่ง
SHOW server_encoding;
และ Client Encoding ด้วย
SHOW client_encoding;
㊱ ตรวจสอบ Connection Limit
หากขึ้นข้อความ
too many connections
ให้ตรวจสอบค่า
SHOW max_connections;
รวมถึงตรวจสอบ Connection ที่เปิดอยู่
SELECT * FROM pg_stat_activity;
ควรแก้ Connection Pool ของแอปก่อนเพิ่ม Limit
㊲ ตรวจสอบ Session ที่ค้าง
ใช้คำสั่ง
SELECT pid, usename, datname, state, query
FROM pg_stat_activity;
เพื่อตรวจสอบ Session ที่เปิดค้างหรือ Query ที่ทำงานนานผิดปกติ
㊳ ตรวจสอบ Query ที่ช้า
หาก PostgreSQL ทำงานช้า ให้ตรวจสอบ
Index
Query Plan
Table Size
Disk
RAM
Connection Pool
Autovacuum
สามารถใช้
EXPLAIN ANALYZE
เพื่อตรวจสอบแผนการทำงานของ Query
㊴ ตรวจสอบ Autovacuum
PostgreSQL ใช้ Autovacuum เพื่อจัดการข้อมูลที่ถูกแก้ไขหรือลบ
หาก Table โตผิดปกติหรือ Query ช้าลง ควรตรวจสอบว่า Autovacuum ทำงานตามปกติ
ไม่ควรปิด Autovacuum โดยไม่มีเหตุผลชัดเจน
㊵ ตรวจสอบ WAL
หากโฟลเดอร์ WAL ใช้พื้นที่มากผิดปกติ อาจเกิดจาก
Replication Slot ค้าง
Backup ไม่สมบูรณ์
Archive Command มีปัญหา
Transaction ยาวเกินไป
ควรตรวจสอบ Log และระบบ Replication ก่อนลบไฟล์ใด ๆ
ห้ามลบไฟล์ใน pg_wal ด้วยตนเอง
㊶ ปิด PostgreSQL อย่างถูกต้อง
ควรหยุด PostgreSQL ผ่าน
Windows Services
pg_ctl
คำสั่ง net stop
เครื่องมือดูแลระบบ
หลีกเลี่ยงการปิดเครื่องทันทีขณะ Import, Backup หรือเขียนข้อมูลจำนวนมาก
㊷ สำรองข้อมูลก่อนอัปเดต
ก่อนอัปเดต PostgreSQL ควรสำรอง
Database
Role
Privilege
Extensions
Config
Application Settings
ควรทดสอบการอัปเกรดในเครื่องพัฒนาก่อนระบบจริง
㊸ ตรวจสอบ Compatibility ของ Extension
Extension เช่น PostGIS อาจต้องใช้เวอร์ชันที่ตรงกับ PostgreSQL
ก่อนอัปเกรดควรตรวจสอบว่า Extension ทั้งหมดรองรับเวอร์ชันใหม่แล้ว
㊹ ติดตั้ง PostgreSQL ใหม่
หากไฟล์โปรแกรมเสียหายและแก้ไม่ได้ อาจถอนและติดตั้งใหม่
ก่อนถอนต้องสำรอง
Database
SQL Dump
Custom Backup
Role
Config
Data Directory
ไม่ควรถอนโปรแกรมก่อนทดสอบว่า Backup สามารถ Restore ได้จริง
㊺ อัปเดต Windows
ติดตั้ง Windows Update ที่จำเป็น
จากนั้นรีสตาร์ตเครื่องก่อนทดสอบ PostgreSQL ใหม่
㊻ ซ่อมไฟล์ระบบ Windows
เปิด Command Prompt แบบผู้ดูแลระบบ
รัน
sfc /scannow
จากนั้นรัน
DISM /Online /Cleanup-Image /RestoreHealth
เมื่อเสร็จแล้วให้รีสตาร์ต Windows
วิธีแก้ Error ที่พบบ่อยใน PostgreSQL
Connection refused
ตรวจสอบว่า PostgreSQL Service ทำงานอยู่ Port ถูกต้อง และ listen_addresses รองรับการเชื่อมต่อ
Password authentication failed
ตรวจสอบ Username, Password, Host, Port และกฎใน pg_hba.conf
Port 5432 already in use
ตรวจสอบด้วย
netstat -ano | findstr :5432
จากนั้นปิด Process ที่ชนกันหรือเปลี่ยน Port ของ PostgreSQL
Database does not exist
ตรวจสอบชื่อ Database และ Connection Profile ใน pgAdmin หรือแอปพลิเคชัน
Role does not exist
ชื่อผู้ใช้ที่ระบุไม่มีอยู่ใน PostgreSQL Instance ที่กำลังเชื่อมต่อ
No pg_hba.conf entry
ไฟล์ pg_hba.conf ยังไม่อนุญาต IP, Database หรือ User ดังกล่าว
ควรเพิ่ม Rule ที่จำกัดเฉพาะการเชื่อมต่อที่จำเป็น
Too many connections
ตรวจสอบ Session ที่เปิดค้างและการตั้งค่า Connection Pool ก่อนเพิ่ม max_connections
Could not connect to server
ตรวจสอบ Service, Host, Port, Firewall และไฟล์ Log
วิธีป้องกันปัญหา PostgreSQL
สำรองฐานข้อมูลเป็นประจำ
ตรวจสอบ PostgreSQL Log เมื่อ Service หยุด
ใช้หนึ่ง Instance ต่อหนึ่ง Port
ไม่ลบไฟล์ใน Data Directory หรือ
pg_walเว้นพื้นที่ว่างของไดรฟ์ให้เพียงพอ
จำกัดสิทธิ์ของ User
ไม่เปิด Port 5432 สู่ Internet โดยตรง
ตรวจสอบ Query และ Index เป็นระยะ
ใช้ Connection Pool อย่างเหมาะสม
ทดสอบการอัปเดตก่อนระบบจริง
คำถามที่พบบ่อย (FAQ)
PostgreSQL กับ MySQL ต่างกันอย่างไร
PostgreSQL มีความสามารถด้าน SQL, Transaction, JSON, Extension และข้อมูลซับซ้อนสูง ส่วน MySQL ใช้งานแพร่หลายและตั้งค่าเริ่มต้นได้ง่ายกว่า การเลือกควรพิจารณาตามลักษณะของระบบ
pgAdmin จำเป็นหรือไม่
ไม่จำเป็น เพราะสามารถจัดการ PostgreSQL ผ่าน psql ได้ แต่ pgAdmin ช่วยให้จัดการ Database, User และ Query ผ่านหน้าจอกราฟิกได้สะดวกขึ้น
เปลี่ยนพอร์ต PostgreSQL ได้หรือไม่
เปลี่ยนได้ใน postgresql.conf แต่ต้องแก้ Port ใน pgAdmin และแอปพลิเคชันทุกตัวให้ตรงกัน
PostgreSQL ใช้งานฟรีหรือไม่
PostgreSQL เป็นซอฟต์แวร์โอเพนซอร์สและใช้งานได้ฟรี
ลืมรหัสผ่าน postgres ต้องทำอย่างไร
ควรใช้กระบวนการรีเซ็ตรหัสผ่านตามเอกสารของ PostgreSQL เวอร์ชันที่ติดตั้ง และดำเนินการเฉพาะเครื่องหรือระบบที่คุณมีสิทธิ์ดูแล
สรุป
ปัญหา PostgreSQL ใช้ไม่ได้บน Windows 10 ส่วนใหญ่มาจาก PostgreSQL Service หยุดทำงาน พอร์ต 5432 ชนกับโปรแกรมอื่น Password ไม่ถูกต้อง ไฟล์ postgresql.conf หรือ pg_hba.conf ผิดพลาด รวมถึง Data Directory มีปัญหา ควรเริ่มจากตรวจสอบ Service, Port, Log และทดลองเชื่อมต่อผ่าน psql ตามลำดับ
ทีม comsiam แนะนำให้สำรองฐานข้อมูลก่อนแก้ไข Config, Data Directory หรืออัปเดต PostgreSQL ทุกครั้ง เพราะการแก้ผิดจุดอาจทำให้ระบบฐานข้อมูลเสียหายเพิ่มเติม นอกจากนี้ comsiam ยังแนะนำให้ตรวจสอบ PostgreSQL Log เป็นอันดับแรกเมื่อ Service เปิดไม่ขึ้น เพราะมักระบุสาเหตุที่แท้จริงได้รวดเร็วกว่าการถอนและติดตั้งโปรแกรมใหม่