PostgreSQL ทำงานในเครื่อง แต่ฉันไม่สามารถเชื่อมต่อได้ ทำไม?


32

เพิ่งปรับปรุงเครื่องของฉันจาก Mac OS X Lion (10.7.4) เป็น Mountain Lion (10.8) และฉันคิดว่ามันติดตั้ง PostgreSQL ของฉัน มันถูกติดตั้งครั้งแรกผ่านทาง Homebrew ฉันไม่ใช่ DBA แต่หวังว่าจะมีคนบอกฉันได้ว่าจะแก้ไขปัญหานี้อย่างไร

ฉันไม่สามารถเชื่อมต่อได้ (แต่สามารถทำก่อนหน้า Lion Mountain ล่วงหน้าได้):

$ psql -U rails -d myapp_development
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

แต่ Postgres ยังคงทำงานอย่างชัดเจน:

$ ps aux | grep postgres
meltemi          2010   0.0  0.0  2444124   5292   ??  Ss   Wed01PM   0:00.02 postgres: rails myapp_development [local] idle    
meltemi           562   0.0  0.0  2439312    592   ??  Ss   Wed12PM   0:02.28 postgres: stats collector process       
meltemi           561   0.0  0.0  2443228   1832   ??  Ss   Wed12PM   0:01.57 postgres: autovacuum launcher process       
meltemi           560   0.0  0.0  2443096    596   ??  Ss   Wed12PM   0:02.89 postgres: wal writer process       
meltemi           559   0.0  0.0  2443096   1072   ??  Ss   Wed12PM   0:04.01 postgres: writer process       
meltemi           466   0.0  0.0  2443096   3728   ??  S    Wed12PM   0:00.85 /usr/local/bin/postgres -D /usr/local/varpostgres -r /usr/local/var/postgres/server.log

และมันก็ตอบสนองต่อการสืบค้น (ทั้งการทดสอบฐานข้อมูลและการพัฒนาฐานข้อมูล) จากแอพ Rails ท้องถิ่น

  User Load (0.2ms)  SELECT "users".* FROM "users" 
  Rendered users/index.html.haml within layouts/application (1.3ms)

ดูเหมือนจะไม่มี/var/pgsql_socket/ไดเรกทอรีให้คนเดียว/var/pgsql_socket/.s.PGSQL.5432ไฟล์ซ็อกเก็ตดังกล่าวข้างต้น!?! บางทีการติดตั้งของ Mountain Lion จะลบล้างสิ่งนั้น

$ ls -l /var/ | grep pg
drwxr-x---   2 _postgres  _postgres    68 Jun 20 16:39 pgsql_socket_alt

ฉันจะแก้ไขปัญหานี้ได้อย่างไร


ไม่ใช่ผู้ดูแลระบบ postgres แต่ไฟล์ซ็อกเก็ตที่ขาดหายไปฟังดูถูกต้อง สร้างไดเร็กทอรี / var / pgsql_socket (โดยผู้ใช้ของคุณมีสิทธิ์ในการเขียน) และรีสตาร์ทเซิร์ฟเวอร์ ดูว่ามันแก้ไขได้หรือไม่
Derek Downey

คำถามที่เกี่ยวข้องในดังนั้น ดูเหมือนว่า Apple ไม่ได้ทำงานที่ยอดเยี่ยมกับการอัพเกรด
Erwin Brandstetter

มีการพูดถึงไฟล์ซ็อกเก็ตที่ถูกสร้างขึ้นในไฟล์บันทึก/usr/local/var/postgres/server.logหรือไม่?
Philᵀᴹ

@ErwinBrandstetter คุณคาดหวังได้อย่างไรว่า Apple จะทำ "งานที่ดี" ในการอัพเกรดแอปบุคคลที่สามที่ติดตั้งด้วยตนเอง * nix
Philᵀᴹ

@ Phil- ไม่เอ่ยถึง ฉันเริ่มคิดว่านี่อาจเป็นปัญหาตัวแปรพา ธ ฉันคิดว่าการ$PATHเปลี่ยนแปลงของฉันกับการอัปเกรด/usr/binล่วงหน้า/usr/local/binและฉันคิดว่า Mountain Lion อาจติดตั้ง PostgreSQL ไว้ล่วงหน้า!?! กำลังสืบสวน ...
Meltemi

คำตอบ:


30

ฉันพบว่าฉันมีปัญหาที่คล้ายกันมากนั่นคือ postgres กำลังเปิดซ็อกเก็ต/var/pgsql_socket_altโดยที่ไม่มีซอฟต์แวร์ใดที่ฉันคาดหวัง แต่การแก้ปัญหาของฉันไม่ใช่แค่ปัญหาของฉัน$PATHเท่านั้น

ฉันต้องสร้างไดเรกทอรี/var/pgsql_socketchown ให้กับตัวเองและตั้งunix_socket_directoryในpostgresql.conf(อยู่ใน/usr/local/var/postgres) ไปยังไดเรกทอรีนั้นจากนั้นใช้pg_ctlไบนารีใน/usr/local/binเพื่อเริ่มต้นเซิร์ฟเวอร์ postgres ที่ถูกต้องเรียบร้อยแล้ว (ซึ่งเป็นที่$PATHมาใน - ตรวจสอบให้แน่ใจว่าwhich pg_ctlแก้ไข/usr/local/bin/pg_ctlหรือเพียงแค่เสมอ เรียกมันอย่างชัดเจน)

วิธีนี้อาจช่วยผู้ใช้รายอื่นที่ค้นหาคำถามนี้ผ่านทางการ/var/pgsql_socket_altกล่าวถึง


น่าสนใจ คุณอยู่ใน Mountain Lion ด้วยหรือไม่ คุณติดตั้ง PostgreSQL ด้วย Homebrew หรือไม่ ถ้าเป็นเช่นนั้นสงสัยว่ามีใครอีกคนที่สามารถตรวจสอบวิธีแก้ไขปัญหานี้เมื่อเทียบกับการเปลี่ยนแปลงของฉัน$PATHตามที่ฉันทำ
Meltemi

ใช่แล้วฉันหวังว่าจะเป็นเช่นนั้น!
จะ

@wolftron วิธีการแก้ปัญหาของคุณเป็น bang-on สำหรับฉัน (Mountain Lion, homebrew / postgres, / var / pgsql_socket_alt ทั้งเก้า) นี่เป็นปัญหาใหม่ของ Mountain Lion กับ homebrew หรือไม่? ฉันจะเปิดตั๋วกับพวกเขาถ้าคุณคิดอย่างนั้น

ดูเหมือนว่าเราได้รับการยืนยันจาก @Jamie แล้ว
จะ

ฉันสามารถยืนยันปัญหานี้และวิธีแก้ปัญหาในการติดตั้ง OS X 10.8.2 / brew ของ postgresql 9.2.1
Hartwig

8

คำอธิบายที่เป็นไปได้และโดยทั่วไปน่าจะเป็นสิ่งpsqlที่มาพร้อมกับ homebrew นั้น/usr/local/bin/psqlแตกต่างจากคำว่า $ PATH ของคุณเช่น/usr/bin/psql(รวมอยู่ใน OS X) คุณอาจต้องการลองใช้เส้นทางแบบเต็ม:

$ /usr/local/bin/psql -U rails -d myapp_development

นอกจากนี้ยังมีบางสิ่งที่ค่อนข้างแปลกในpsผลลัพธ์ของคำถามของคุณ: เซิร์ฟเวอร์ postgres กำลังทำงานภายใต้meltemiผู้ใช้ Unix ในขณะที่โดยทั่วไปpostgresผู้ใช้ Unix เฉพาะจะถูกใช้สำหรับเรื่องนั้น


นอกจากนี้_postgresฉันยังไม่รู้จัก (ที่มีเครื่องหมายขีดเส้นใต้) สำหรับผู้ใช้ / กลุ่ม นั่นเป็นสิ่งประดิษฐ์หรือคาดหวัง?
Erwin Brandstetter

ใช่ดูเหมือนว่าจะมี$PATHปัญหาตามที่คุณระบุ สิ่งต่างๆทำงานเหมือนเมื่อก่อนที่ฉันใช้/usr/local/bin/psqlเพื่อเข้าถึงฐานข้อมูล Lion ทั้งสองไม่มีระบบ PostgreSQL หรือ $ PATH ของฉันถูกตั้งค่าแตกต่างกัน เป็นเวลาหนึ่งปีแล้วที่ฉันยุ่งกับเรื่องนี้ครั้งสุดท้ายดังนั้นฉันจึงจำไม่ได้แน่นอน สำหรับผู้ใช้ Unix ... ด้วยการติดตั้ง Homebrew ของ PostgreSQL เซิร์ฟเวอร์จะถูกเรียกใช้โดย launchd และผู้ใช้จะถูกตั้งค่าเป็นผู้ใช้ภายในที่ติดตั้งเป็นค่าเริ่มต้น สิ่งที่มีการตั้งค่าที่แตกต่างกันบนระบบปฏิบัติการ Mac OS X Serverซึ่งจะเริ่มขึ้น PostgreSQL postgresโดยอัตโนมัติภายใต้
Meltemi

4

ฉันไม่รู้ไฟล์ปรับแต่งใด ๆ สำหรับไคลเอนต์ psql อย่างไรก็ตาม psql เคารพตัวแปรสภาพแวดล้อมจำนวนมากที่สัมพันธ์กับตัวเลือกบรรทัดคำสั่ง

เพื่อให้ psql ใช้ซ็อกเก็ตที่คุณเลือกโดยอัตโนมัติคุณสามารถตั้งค่าตัวแปร PGHOST เป็นไดเรกทอรีที่มีซ็อกเก็ตได้ กล่าวคือ

PGHOST=/var/pgsql_socket_alt
psql -d mydatabsase

1
ไม่มีเอกสารใดที่ฉันพบว่าคุณสามารถตั้ง PGHOST ไปยังไดเรกทอรีที่ไฟล์ซ็อกเก็ตอยู่ แต่มันใช้งานได้จริง ขอบคุณ!
Andrew Schulman


3

ล่าช้า แต่ฉันพบว่ามีประโยชน์: http://tammersaleh.com/posts/installing-postgresql-for-rails-3-1-on-lion

นั่นคือสำหรับ Lion แต่ฉันมีปัญหาเช่นเดียวกับเธรดในหัวข้อนี้หลังจากอัปเกรดจาก 10.6.8 เป็น Mountain Lion และติดตั้ง PostgreSQL ผ่าน HomeBrew ก่อนหน้านี้ในขณะที่ใช้ 10.6.8 ฉันยังมี/var/pgsql_socket_altโฟลเดอร์ลึกลับหลังการอัพเกรด แต่ฉันเพิ่งลบมันและสร้าง/var/pgsql_socketตามที่แนะนำโดย @wolftron อย่างไรก็ตามนั่นไม่ใช่ทางออกสุดท้าย

ถ้าฉันปล่อยunix_socket_directoryว่าง / คอมเม้นท์ไว้postgresql.confโครงการใด ๆ ที่มีอยู่ก่อนการอัพเกรดจะบ่นว่าซ็อกเก็ต/var/pgsql_socketขาดหายไป แต่ถ้าฉันเปลี่ยน conf และ hard-coded var/pgsql_socketโครงการใหม่ใด ๆ ก็จะบ่นว่าซ็อกเก็ต/tmpหายไป น่าผิดหวังมาก ... จนกระทั่งฉันติดตั้งใหม่pg gemในโครงการ pre-10.8 ( gem uninstall pg && gem install pg) และทิ้งunix_socket_directoryความคิดเห็นไว้ในconfไฟล์ หลังจากpg_ctlรีสตาร์ทเซิร์ฟเวอร์อย่างรวดเร็วทั้งโครงการใหม่และเก่าก็ใช้งานได้ ซ็อกเก็ต pgsql ของฉันใช้งานได้ใน/tmpตอนนี้ fwiw

Sidenote: หากคุณใช้activerecord-postgresql-adaptergem ให้ถอนการติดตั้งก่อนจากนั้นติดตั้ง pg ใหม่จากนั้นติดตั้งactiverecord-postgresql-adapterอีกครั้ง


2

ฉันเพิ่งสมัครใช้งาน dba SE เท่านั้นดังนั้นดูเหมือนจะไม่สามารถแสดงความคิดเห็นในโพสต์ที่เกี่ยวข้องได้

อย่างไรก็ตามฉันมั่นใจว่าฉันอยู่ในเรือลำเดียวกันกับ @thure ฉันทำให้แน่ใจว่า / usr / local / bin ก่อนหน้านี้ใน PATH มากกว่า / usr / bin ได้ตรวจสอบว่าไบนารีตัวใดที่เชลล์แฮชด้วยwhichและtypeอื่น ๆ

ฉันเห็นอาการเช่นเดียวกับ @thure จากนั้นฉันก็มีความศักดิ์สิทธิ์ ฉันรู้ว่าฉันสร้างpggem ขึ้นมาใหม่(ฉันใช้ Ruby) ในเชลล์ที่ PATH ได้รับผลกระทบจาก path_helper ของ Mac (ซึ่งทำงานจาก / etc / profile และวาง / usr / bin ก่อน / usr / local / bin) .

ฉันถอนการติดตั้ง pg และติดตั้งใหม่ในเชลล์ที่ PATH ถูกต้อง ทันใดนั้นฉันก็สามารถเชื่อมต่อ!

เพื่อให้แน่ใจว่าคุณ recompile ผูกภาษาของคุณคนและปล่อยให้พวกเขาพบว่าสำเนาถูกต้องของ pg_config(สมมุติ)



1

ฉันพบว่าการเชื่อมโยงตำแหน่งจริงกับตำแหน่งที่คาดหวังใช้ได้ผล:

sudo ln -s /var/pgsql_socket_alt /var/pgsql_socket

ตามบรรทัดคำตอบที่ยอมรับโดย @thure แต่เรียบง่ายกว่า


1

นี่คือปี 2016 El Capitan อยู่ที่นั่นและ Apple ยังคงเปลี่ยนแปลงสิ่งต่างๆ Postgres ได้รับการติดตั้งเป็นส่วนหนึ่งของระบบปฏิบัติการและไฟล์ config postgres ตั้งค่าคุณสมบัติ unix_socket_directories ใน postgresql.conf เป็น / tmp ซ็อกเก็ตอยู่ใน /tmp/.s.PGSQL.5432 ฉันสามารถแก้ไขปัญหาด้วยการดำเนินการต่อไปนี้:

sudo ln -s /tmp /var/pgsql_socket

หวังว่านี่จะช่วยใครซักคน


1

ค้นหาไฟล์ซ็อกเก็ตที่ถูกต้อง

find / -name .s.PGSQL.5432 -ls

จากผลลัพธ์รับพา ธ ไปยังไฟล์และใช้พา ธ พร้อมกับพารามิเตอร์ "-h" ภายในคำสั่ง psql

ตัวอย่างเช่นนี่คือวิธีที่ฉันเชื่อมต่อกับฐานข้อมูลปฏิทิน MacOS Server และผู้ติดต่อ (ภายในเซสชัน ssh ไปยังเซิร์ฟเวอร์):

sudo psql -U _calendar -h /private/var/run/caldavd/PostgresSocket/ -d caldav

จากนั้นไฟล์ซ็อกเก็ตที่เส้นทางจะถูกใช้เพื่อเชื่อมต่อ


1

ตามค่าเริ่มต้น postgres ดูเหมือนว่าจะพยายามเชื่อมต่อผ่านซ็อกเก็ตยูนิกซ์โดเมน ซ็อกเก็ต UNIX DOMAIN

เรื่องนี้เกิดขึ้นกับฉันเมื่อฉันเรียกใช้อินสแตนซ์ postgres บนนักเทียบท่า คุณต้องดูว่าการเชื่อมต่อแบบไหนที่เซิร์ฟเวอร์ของคุณยอมรับ สำหรับฉันมันเห็นได้ชัดว่า TCP และไม่ใช่ซ็อกเก็ตโดเมน unix

การเพิ่มการตั้งค่าสถานะเพื่อยอมรับการโฮสต์เปลี่ยนเส้นทางการเชื่อมต่อเพื่อแก้ไขเส้นทางและแก้ไขปัญหา

psql -U username -p port -h host

PS: ซ็อกเก็ตโดเมน Unix ทำงานในระดับเคอร์เนลและการเชื่อมต่อไม่จำเป็นต้องผ่านแจ๊สทั้งหมดที่จำเป็นสำหรับการเชื่อมต่อ TCP พวกมันค่อนข้างเร็วและมีประสิทธิภาพเมื่อคุณต้องการเชื่อมต่อกับเครื่องของคุณเองจากกระบวนการอื่นซึ่งเป็นส่วนหนึ่งของการสื่อสารระหว่างกระบวนการ


0

สวัสดีชาวโลก :)
วิธีที่ดีที่สุด แต่แปลกสำหรับฉันคือการทำสิ่งต่อไป

1)ดาวน์โหลดpostgres93.appหรือเวอร์ชันอื่น เพิ่มแอพนี้ลงใน / Applications / โฟลเดอร์

2)เพิ่มแถว (คำสั่ง) ลงในไฟล์.bash_profile(ซึ่งอยู่ในโฮมไดเร็กตอรี่ของฉัน):

ส่งออก PATH = / Applications / Postgres93.app / เนื้อหา / MacOS / bin /: $ PATH
มันเป็นเส้นทางไปจากpsql Postgres93.appแถว (คำสั่ง) รันทุกครั้งที่มีการเริ่มคอนโซล

3)เปิดตัวPostgres93.appจาก/Applications/โฟลเดอร์ เริ่มต้นเซิร์ฟเวอร์ภายใน (พอร์ตคือ "5432" และโฮสต์คือ "localhost")

4)หลังจากการเปลี่ยนแปลงทั้งหมดนี้ฉันดีใจที่ได้ทำงาน$ createuser -SRDP user_nameและสั่งการอื่น ๆ และเพื่อดูว่ามันทำงาน! Postgres93.appสามารถทำให้ทำงานทุกครั้งที่ระบบของคุณเริ่มทำงาน

5)PG Commander.appนอกจากนี้หากคุณต้องการจะดูฐานข้อมูลของคุณกราฟิกคุณควรติดตั้ง เป็นวิธีที่ดีในการดูฐานข้อมูล postgres ของคุณในรูปแบบตารางข้อมูลที่สวยงาม

แน่นอนว่ามันมีประโยชน์สำหรับเซิร์ฟเวอร์ในระบบเท่านั้น ฉันยินดีถ้าคำแนะนำนี้ช่วยให้ผู้อื่นที่ประสบปัญหานี้



0

ฉันได้รับข้อผิดพลาดเดียวกันนี้จากการพยายามเรียกใช้psqlบนบรรทัดคำสั่ง มันกลับกลายเป็นว่าโซลูชันของฉันง่ายกว่ามาก ผมเคยผิดพลาดการกำหนดค่าพอร์ตฟังในไฟล์ config: /etc/postgresql/9.4/main/postgres.conf ฉันเปลี่ยนพอร์ตจากพอร์ต = 5432 เป็นพอร์ต = 5433 เมื่อฉันเปลี่ยนกลับเป็น 5432 จะทำงานได้ตามที่คาดไว้

เพื่อทดสอบว่าคุณทำสิ่งที่คล้ายกันหรือไม่คุณสามารถเรียกใช้ $ psql -p5433 มีตัวเลือกที่มีประโยชน์มากมายเช่นนี้สำหรับคำสั่ง psql ที่คุณสามารถหาได้ที่นี่: http://www.postgresql.org/docs/9.4/static/app-psql .html เพื่อให้คุณสามารถทดสอบการกำหนดค่าผิดพลาดโดยเฉพาะของคุณเอง แน่นอนคุณสามารถลบชุดการเปลี่ยนแปลงชุดสุดท้ายออกจากไฟล์ * .conf ได้เช่นกันเพื่อทดสอบว่าสิ่งเหล่านี้เป็นสาเหตุของปัญหาของคุณหรือไม่ ฉันคิดว่ามันคุ้มค่าที่จะเช็คเอาท์ก่อนที่คุณจะยุ่งเกี่ยวกับการอนุญาตไฟล์และการเป็นเจ้าของ (อย่าลืม/etc/init.d/postgresql restart)

สิ่งที่ฉันไม่พบคือไฟล์ปรับแต่งที่ตั้งค่าเริ่มต้นสำหรับคำสั่ง psql CLI ใครบางคนสามารถแสดงความคิดเห็นกับที่ได้โปรด?

สำหรับฉันฉันมักจะกลับไปที่หลักการแรกของการเขียนโปรแกรม: "ฉันมักจะเป็นแหล่งที่มาของข้อผิดพลาดใด ๆ !"

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