ไม่สามารถเชื่อมต่อกับ Postgres บน Vagrant Box - การเชื่อมต่อถูกปฏิเสธ?


10

ก่อนอื่นฉันยังใหม่กับ Vagrant และ Postgres

ฉันสร้างอินสแตนซ์ Vagrant ของฉันโดยใช้http://files.vagrantup.com/lucid32.boxโดยไม่มีปัญหา ฉันสามารถเรียกใช้vagrant upและvagrant sshไม่มีปัญหา

ฉันทำตามคำแนะนำด้วยการเปลี่ยนแปลงเล็กน้อยฉันติดตั้งแพ็คเกจ "postgresql-8.4-postgis" แทน "postgresql postgresql-contrib"

ฉันเริ่มเซิร์ฟเวอร์โดยใช้:

postgres@lucid32:/home/vagrant$ /etc/init.d/postgresql-8.4 start

ในขณะที่เชื่อมต่อกับอินสแตนซ์คนพเนจรฉันสามารถใช้psqlเพื่อเชื่อมต่อกับอินสแตนซ์โดยไม่มีปัญหา

ใน Vagrantfile ของฉันฉันได้เพิ่ม:

config.vm.forward_port 5432, 5432

แต่เมื่อฉันพยายามเรียกใช้ psql จาก localhost ฉันจะได้รับ:

psql: could not connect to server: Connection refused
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

ฉันแน่ใจว่าฉันขาดอะไรง่าย ๆ ความคิดใด ๆ

ปรับปรุง:

ฉันพบการอ้างอิงถึงปัญหาเช่นนี้และบทความที่แนะนำให้ใช้:

psql -U postgres -h localhost

กับที่ฉันได้รับ:

psql: server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.

คำตอบ:


5

คำแนะนำจากการโพสต์บล็อกที่คุณพูดถึงนั้นไม่ถูกต้องสำหรับอูบุนตู: พวกเขาใช้ชิ้นส่วนจากการติดตั้งเซิร์ฟเวอร์ที่คอมไพล์เองที่ไม่เข้ากันกับเวอร์ชั่นแพคเกจ

หนึ่งไม่ควรสร้าง / usr / local / pgsql / data และเรียกใช้ initdb ไปยังไดเรกทอรีนั้นเพราะแพคเกจ ubuntu ใช้/var/lib/postgresql/<pg-version-number>/<cluster-name>และทำงานinitdbในนามของผู้ใช้

ข้อผิดพลาดในการกล่าวถึง "/tmp/.s.PGSQL.5432" แสดงว่าตำแหน่งที่คาดหวังสำหรับไฟล์นี้ไม่ถูกต้อง (สำหรับ Ubuntu) มันควรจะเป็น/var/run/postgresqlมา อาจเป็นเพราะการเรียกใช้ initdb ด้วยตนเองพร้อมพารามิเตอร์ที่เข้ากันไม่ได้กับ ubuntu

ไฟล์ postgresql.conf และ pg_hba.conf ที่จะแก้ไขเพื่อเปิดใช้งานการเชื่อมต่อที่ไม่ใช่แบบโลคัลควรอยู่ภายใน/etc/postgresql/8.4/mainและไม่ใช่ / usr / local / pgsql / data

/etc/init.d/postgresql-8.4ควรได้รับการเปิดตัวโดยราก (เป็นทุกสิ่งทุกอย่างใน /etc/init.d) ไม่ได้โดยผู้ใช้ postgres

ไม่ควรตั้งค่า PGDATA ด้วยตนเองเพราะจะทำให้แพคเกจ ubuntu postgres ทำงานอีกครั้ง

คำตอบของฉันคือการกำจัดและติดตั้งแพ็คเกจ postgresql-8.4 โดยไม่ทำตามคำแนะนำใด ๆ จากโพสต์บล็อก postgresql-8.4-postgis ขึ้นอยู่กับ postgresql-8.4 ดังนั้นมันจะถูกลบเช่นกัน ตรวจสอบให้แน่ใจว่าได้เลิกทำการตั้งค่า PGDATA ใน /etc/bash.bashrc


ฉันกำลังติดตั้งใหม่อีกครั้ง แต่สังเกตเห็นในคำตอบของคุณว่าเส้นทางผิดกับ Ubuntu เพื่อดูไฟล์ผิด อาจเป็นเพราะไคลเอนต์ที่ทำงานบน OSX ในขณะที่เซิร์ฟเวอร์เป็นกล่องอูบุนตู?

ดังนั้นฉันจึงติดตั้งใหม่และได้รับข้อผิดพลาดเดียวกันแน่นอน ฉันมองไปรอบ ๆ อีกเล็กน้อยและพบว่าฉันไม่มีพอร์ตที่เปิดใน iptables หลังจากทำตามคำแนะนำที่นี่: cyberciti.biz/tips/howto-iptables-postgresql-open-port.html ฉันสามารถเชื่อมต่อได้

ฉันไม่สามารถบอกได้อย่างแน่นอนว่าการติดตั้งนั้นเป็นส่วนหนึ่งของการแก้ไข แต่สิ่งนี้มีประโยชน์แน่นอน ดังนั้นฉันจึงมอบรางวัลให้คุณ

เมื่อไคลเอนต์และเซิร์ฟเวอร์อยู่ในโฮสต์ที่แตกต่างกัน psql จะต้องมีการเรียกใช้โดยpsql -h <server> [optional other arguments]ที่ <server> เป็นชื่อโฮสต์หรือที่อยู่ IP (และไม่ใช่ localhost) ของเซิร์ฟเวอร์ (กล่องอูบุนตูในกรณีนี้) ในคำถามมันดูไม่เหมือนที่คุณเรียกมันด้วยวิธีนี้ดังนั้นฉันเลยคิดว่าคำสั่งทั้งหมดจะถูกเรียกใช้บนเซิร์ฟเวอร์ อย่างไรก็ตามฉันคิดว่าการติดตั้งใหม่นั้นเป็นสิ่งที่มีเหตุผลแม้ว่าการเชื่อมต่อนั้นจะสามารถทำได้

ฉันกำลังเรียกมันว่า: psql -U postgres -h localhost เนื่องจากฉันมีการตั้งค่าการส่งต่อพอร์ตคนจรจัด

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