เชื่อมต่อของคุณล้มเหลวเนื่องจากโดยค่าเริ่มต้นpsql
เชื่อมต่อผ่านซ็อกเก็ต UNIX โดยใช้การตรวจสอบที่ต้องใช้ระบบปฏิบัติการยูนิกซ์ปัจจุบันจะมีชื่อผู้ใช้เช่นเดียวกับpeer
psql
ดังนั้นคุณจะต้องสร้างผู้ใช้ UNIX dev
แล้วลงชื่อเข้าdev
ใช้หรือใช้sudo -u dev psql test_development
สำหรับเข้าถึงฐานข้อมูล (และไม่psql
ควรถามรหัสผ่าน)
หากคุณไม่สามารถหรือไม่ต้องการสร้างผู้ใช้ UNIX เช่นถ้าคุณเพียงต้องการเชื่อมต่อกับฐานข้อมูลของคุณสำหรับการค้นหาเฉพาะกิจการบังคับใช้การเชื่อมต่อซ็อกเก็ตโดยใช้psql --host=localhost --dbname=test_development --username=dev
(ดังที่คำตอบจาก @meyerson) จะแก้ปัญหาเฉพาะหน้าของคุณ
แต่ถ้าคุณตั้งใจที่จะบังคับใช้การพิสูจน์ตัวตนด้วยรหัสผ่านบนซ็อกเก็ต Unix แทนที่จะใช้วิธีเพียร์ให้ลองเปลี่ยนpg_hba.conf
บรรทัด * ต่อไปนี้:
จาก
# TYPE DATABASE USER ADDRESS METHOD
local all all peer
ถึง
# TYPE DATABASE USER ADDRESS METHOD
local all all md5
แน่นอนคุณสามารถสร้างกฎเฉพาะสำหรับฐานข้อมูลหรือผู้ใช้ที่เฉพาะเจาะจงยิ่งขึ้นด้วยผู้ใช้บางคนมีpeer
และอื่น ๆ ที่ต้องการรหัสผ่าน
หลังจากเปลี่ยนแปลงpg_hba.conf
หาก PostgreSQL ทำงานอยู่คุณจะต้องทำการอ่านการกำหนดค่าอีกครั้งโดยการโหลดใหม่ ( pg_ctl reload
) หรือเริ่มใหม่ ( sudo service postgresql restart
)
* ไฟล์pg_hba.conf
น่าจะอยู่ที่/etc/postgresql/9.x/main/pg_hba.conf
แก้ไข: ข้อสังเกตจาก @Chloe, @JavierEH, @Jonas Eicher, @fccoelho, @Joanis, @Uphill_ ความคิดเห็นที่รวมกันเป็นคำตอบ