Postgres - ไม่สามารถสร้างซ็อกเก็ต TCP / IP ได้


14

ฉันใช้งานแอพพลิเคชั่นสำหรับการพัฒนาด้วย postgresql 9.3 เมื่อฉันพยายามเริ่มต้นเซิร์ฟเวอร์ผู้โดยสารวันนี้ฉันได้รับ:

PG::ConnectionBad - could not connect to server: Connection refused
    Is the server running on host "localhost" (217.74.65.145) and accepting
    TCP/IP connections on port 5432?

ฉันคิดว่าไม่มีเรื่องใหญ่อะไรที่เคยเกิดขึ้นมาก่อน การเริ่มต้น postgres ใหม่จะแก้ไขปัญหาได้เสมอ ดังนั้นฉันจึงวิ่งsudo service postgresql restartและได้รับ:

 * Restarting PostgreSQL 9.3 database server
 * The PostgreSQL server failed to start. Please check the log output:
2014-06-11 10:32:41 CEST LOG:  could not bind IPv4 socket: Cannot assign requested address
2014-06-11 10:32:41 CEST HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2014-06-11 10:32:41 CEST WARNING:  could not create listen socket for "localhost"
2014-06-11 10:32:41 CEST FATAL:  could not create any TCP/IP sockets
...fail!

ฉันpostgresql.confจุดที่เป็นค่าเริ่มต้น: และพอร์ตlocalhost 5432ฉันพยายามเปลี่ยนพอร์ต แต่ข้อความแสดงข้อผิดพลาดเหมือนกัน (ยกเว้นการเปลี่ยนพอร์ต)

ทั้งสองps aux | grep postgresqlและps aux | grep postmasterไม่ได้คืนอะไรเลย

แก้ไข:

ในpostgresql.confฉันเปลี่ยนlisten_addressesไป127.0.0.1เป็นแทนlocalhostและมันได้ทำเคล็ดลับเซิร์ฟเวอร์รีสตาร์ท ฉันยังมีการแก้ไขการตั้งค่าฐานข้อมูลการใช้งานของฉันและชี้ไปที่แทน127.0.0.1 localhostแต่คำถามคือตอนนี้ทำไมถือว่า localhost จะเป็น217.74.65.145และไม่ได้127.0.0.1?

นั่นคือของฉัน/etc/hosts:

127.0.0.1   local
127.0.1.1   jacek-X501A1
127.0.0.1   something.name.non.example.com
127.0.0.1   company.something.name.non.example.com

เอาท์พุทใด ๆ จากsudo netstat -anlp | grep 5432?
Flup

1
หากคุณจะทำให้ข้อมูลสับสนโปรดทำอย่างรับผิดชอบและใช้example.comเป็นชื่อโดเมน
เจนนี่ D

คำตอบ:


12

คุณ/etc/hostsเสีย บรรทัดแรกควรอ่าน

127.0.0.1   localhost something.name.non.example.com company.something.name.non.example.com

หมายเหตุสำหรับผู้อ่านในอนาคตที่แม้ว่าคุณจะมีรายการ localhost /etc/hostsปัจจัยอื่น ๆ อาจทำให้เกิดการตอบสนอง DNS ที่แตกต่างกันเมื่อการค้นหา DNS ของlocalhostทำงานจริง ดูstackoverflow.com/a/47824848/5419599
สัญลักษณ์แทน

@ Wildcard ฉันไม่ทราบว่าระบบปฏิบัติการใดที่คำตอบนั้นจะใช้ได้กับ (ถ้ามี) แน่นอนว่ามันไม่สมเหตุสมผลบน Linux
kasperd

1
@kasperd ฉันคิดว่าถ้าคุณได้รับคำสั่งซื้อdns filesแทนที่จะเป็นfiles dnsnsswitch.conf และมีเนมเซิร์ฟเวอร์ที่แก้ปัญหา localhost คุณอาจประสบปัญหา แต่นั่นฟังดูไม่น่าจะเป็นไปได้สูงสำหรับฉัน ...
เจนนี่ D

@JennyD คำตอบที่ลิงก์ด้านบนแนะนำให้ใช้nslookupในการตรวจสอบ แต่nslookupคำสั่งบน Linux ไม่ได้ใช้nsswitch.confและ/etc/hostsเป็นที่แรก และสำหรับการdns filesกำหนดค่าดูเหมือนจะถามปัญหากับฉัน
kasperd

1
@kasperd เห็นด้วย - มันจะค่อนข้างสูงในระดับ "มัน - ของคุณเอง - ไอ้ - ความผิด"
Jenny D

0

ฉันเข้าใจว่าคำถามนี้ได้รับคำตอบแล้ว แต่สำหรับผู้ที่ยังมีข้อผิดพลาดเหตุผลอาจเป็นได้ว่ากระบวนการอื่นได้เริ่มต้นแล้ว ตัวอย่างเช่นHomebrewในการบูตระบบ

หากเป็นกรณีนี้ให้ลองหยุด:
brew services stop postgres

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.