การซ่อมแซม Postgresql หลังจากอัปเกรดเป็น OSX 10.7 Lion


196

ฉันเพิ่งอัพเกรดเป็น OSX 10.7 ณ จุดนี้การติดตั้งทางรถไฟของฉันได้รับการติดตั้งอย่างสมบูรณ์เมื่อพยายามเชื่อมต่อกับเซิร์ฟเวอร์ psql เมื่อฉันทำจากบรรทัดคำสั่งโดยใช้

psql -U postgres

มันใช้งานได้ดีทั้งหมด แต่เมื่อฉันพยายามเรียกใช้เซิร์ฟเวอร์หรือคอนโซล rails ด้วยชื่อผู้ใช้และรหัสผ่านเดียวกันฉันได้รับข้อผิดพลาดนี้

...activerecord-3.0.9/lib/active_record/connection_adapters/postgresql_adapter.rb:950:in `initialize': could not connect to server: Permission denied (PGError) 
Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

ความคิดใด ๆ ที่อาจเกิดขึ้นจะเป็นประโยชน์อย่างยิ่ง! ขอบคุณ!


นี่ก็กระทบคนในออฟฟิศของฉันด้วย เรามีปัญหาที่คล้ายกันกับการรับไบนารีที่ไม่ถูกต้องปัญหาเพิ่มเติมเกี่ยวกับการพยายามเชื่อมต่อกับซ็อกเก็ตโดเมนในไดเรกทอรีอื่นที่มีสิทธิ์ที่แตกต่างกันและดูเหมือนว่าการอัปเกรดจะกินข้อมูลทั้งหมดในฐานข้อมูลท้องถิ่น โชคดีที่นี่เป็นเพียงกล่องพัฒนาดังนั้นจึงไม่ใช่เรื่องใหญ่ แต่น่ารังเกียจอย่างอ่อนโยน :)

1
ฉันตีตัวเองวันนี้และจำการอ่านคำถามของคุณเมื่อวานนี้ ดีที่จะเห็น @John วังมีออกมาและอธิบาย :)
ไรอัน Bigg

คำตอบ:


291

มันเป็นปัญหาของเส้นทาง Mac OSX Lion รวม Postgresql ในระบบทันที หากคุณทำสิ่งนี้which psqlคุณจะเห็นusr/bin/psqlแทนที่จะusr/local/bin/psqlเป็นแบบที่ถูกต้องของ HomeBrew หากคุณเรียกใช้brew doctorคุณควรได้รับข้อความที่ระบุว่าคุณต้องเพิ่มusr/local/binไว้ในส่วนหัวของตัวแปร PATH env ของคุณ

การแก้ไข. bash_profile หรือ. profile ของคุณหรือเชลล์ใดที่คุณใช้และเพิ่ม: export PATH=/usr/local/bin:$PATH

เป็นการส่งออกครั้งแรกสำหรับPATHเซสชันนั้นออกจากคุณเชลล์เซสชันหรือแหล่งไฟล์ของคุณsource ~/.bash_profileและตอนนี้มันก็ควรจะตกลงอีกครั้ง


12
มันคงที่ นอกจากนี้คุณยังสามารถแก้ไข / etc / path และให้แน่ใจว่า / usr / local / bin อยู่ด้านบน
Greg

153
นอกจากนี้โปรดทราบว่าหากคุณติดตั้ง pg gem ก่อนที่จะแก้ไขเส้นทางของคุณมันจะใช้ psql ที่ไม่ถูกต้อง ถ้าเป็นเช่นนั้นถอนการติดตั้ง pg gem แล้วติดตั้งใหม่ (gem ถอนการติดตั้ง pg && gem install pg)
ทรอย

4
นี่สำหรับ homebrew หรือไม่ พอร์ตดูเหมือนว่าจะใส่ไว้ใน: / opt / local / lib / postgresql91 ดังนั้นให้แน่ใจว่าคุณใช้ export PATH = / opt / local / lib / postgresql91 / bin: $ PATH
Antony Stubbs

1
เส้นทางของฉันรายงานอย่างถูกต้อง แต่โซลูชันของ Troy ในการถอนการติดตั้ง pg gem จากนั้นการให้ตัวติดตั้ง bundler ใหม่ได้ทำเพื่อฉัน
Tom Harrison

2
เพื่อชี้แจง - ดูเหมือนว่าคุณจะดีที่สุดในการตั้งค่าเส้นทางของคุณอย่างถูกต้องจากนั้นถอนการติดตั้ง / ติดตั้ง pg gem ใหม่อีกครั้ง
Jamie Cook

90

สำหรับผู้ที่สนใจฉันได้รวบรวมวิธีแก้ปัญหาไว้ด้วยกัน ทั้งหมดที่ฉันต้องการคือการเพิ่ม

host: localhost

เพื่อ database.yml สำหรับสภาพแวดล้อมของฉันและทั้งหมดเป็นน้ำเกรวี่


9
ระวังด้วยสิ่งนี้: การตั้งค่านี้จะเปลี่ยนการเข้าถึงจากซ็อกเก็ตโดเมนเป็นการเชื่อมต่อ TCP ในขณะที่มันใช้งานได้คุณอาจสูญเสียประสิทธิภาพเล็กน้อยและพอร์ตที่ใช้งานได้บนเครื่องของคุณซึ่งอาจมีปัญหาขึ้นอยู่กับการตั้งค่าของคุณ วิธีแก้ปัญหาของ John นั้นถูกต้อง
pilif

3
'gem uninstall pg' (เลือกทุกรุ่น) จากนั้น 'มัด' อีกครั้งเพื่อติดตั้งเวอร์ชั่น pg จาก Gemfile ของคุณใช้งานได้สำหรับฉัน
tmadsen

ขอบคุณ Dave G สิ่งนี้ก็ใช้ได้กับฉันเช่นกัน ฉันติดตั้งการอัปเดต 10.7.3 และ rake db: migrate complained มันคงที่
Sathish

มันก็ใช้ได้กับฉันเช่นกัน อย่างไรก็ตามฉันทิ้งรหัสผ่านและชื่อผู้ใช้ว่างเปล่า
Benjamin

ฉันคิดว่ามันจะทำงานได้เพราะมันบังคับให้มีการเชื่อมต่อ TCP / IP
duma

46

ฉันมีปัญหามากกับ Mountain Lion แต่สิ่งเดียวที่ทำงานให้ฉันได้คือการแก้ไขนี้ :

ตรวจสอบว่าเป้าหมายที่แท้จริงคือที่ไหน:

sudo find / -name .s.PGSQL.5432

ฉันต้องการสร้างไดเรกทอรีนี้:

mkdir /var/pgsql_socket/

จากนั้นใช้ผลลัพธ์จากการค้นหาด้านบนสร้าง symlink นี้:

ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/

ฉันสงสัยว่าสำหรับคนส่วนใหญ่ใน Mountain Lion คุณสามารถสร้าง dir และทำ symlink และไม่ต้องเสียเวลาทำการค้นหาเว้นแต่ symlink จะไม่ทำงาน

PS - PostgreSQL ของฉันถูกติดตั้งผ่านตัวติดตั้งอย่างเป็นทางการ


ฉันมีความรู้สึกว่ามันอาจเป็นได้สำหรับฉัน แต่ไม่สามารถทำงานได้ ฉันได้รับสิ่งนี้: ln: / var / pgsql_socket /: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
Emmanuel

ขออภัยฉันลืมไปแล้ว เพิ่มขั้นตอนพิเศษในการตอบ
Ben

อวยพรคุณเบ็น ชื่นชมอย่างมาก
แมตต์

29

หากปัญหายังคงมีอยู่ในอดีตการเปลี่ยนเส้นทาง (เช่นเดียวกับฉัน) ลองสิ่งนี้ ...

gem pristine pg

ปรากฏว่าปัญหา (บางส่วน) อยู่ใน pg gem เอง เมื่อสร้างมันจะระบุว่าซ็อกเก็ตโดเมนควรอยู่ที่ใด หากคุณเปลี่ยนตำแหน่งของซ็อกเก็ตโดเมนหลังจากข้อเท็จจริงดูเหมือนว่าจะไม่มีผลจนกว่าคุณจะสร้างอัญมณีขึ้นใหม่


สิ่งนี้ใช้ได้ผลสำหรับฉันแม้หลังจากที่ฉันได้แก้ไข PATH และติดตั้ง pg gem ใหม่โดยไม่ต้องมีความบริสุทธิ์
Elliot Winkler

ขอบคุณสำหรับเคล็ดลับนี้ Darren
bhinks

15

สำหรับผู้ที่ติดตั้งโดยตรงจากตัวติดตั้งอย่างเป็นทางการเพียงแค่เพิ่มโฮสต์ในคำสั่งที่ใช้งานได้โดยไม่มีการเปลี่ยนแปลงพา ธ :

psql -h localhost -U postgres

5

ฉันมีปัญหาเดียวกันและมีปัญหาในการแก้ปัญหาของ John Wang ในฐานะที่เป็นคาร์เรนกล่าวว่ามีปัญหากับอัญมณี pg เพื่อให้ได้งานฉันต้อง:

gem uninstall pg

จากนั้นติดตั้งใหม่

ซึ่งมันได้ผล


ฉันต้องวิ่งสองครั้งนี้ ... แปลก ฉันถอนการติดตั้ง pg จากนั้นให้ติดตั้งชุดและมันล้มเหลว จากนั้นเพิ่งติดตั้ง pg gem และใช้งานได้ ขอบคุณ!
ดัสติน

3

ฉันวิ่งเข้าไปในนี้เช่นกัน แต่ฉันได้ติดตั้ง postgres ตัวเอง (ไม่ใช่ homebrew) หากเป็นกรณีนี้คุณต้องค้นหาเส้นทางเก่าไปยัง psql (ซึ่งอาจเป็น / usr / local / bin แต่สำหรับฉันคือ / usr / local / pgsql / bin) และเติมเข้าไปใน $ PATH ของคุณ

(ก่อน) which psql=> / usr / bin / psql

(แก้ไข) export PATH = / usr / local / psql / bin: $ PATH

(หลังจาก) `ซึ่ง psql '=> / usr / local / psql / bin

คำแนะนำของ John Wang ให้source ~/.bash_rcเพิ่ม bash_rc ในภายหลังเป็นสีทอง



1

ฉันไม่พอใจกับคำตอบที่ได้รับการตอบกลับมากที่สุดเนื่องจากพวกเขาเป็นผู้ใช้เฉพาะ OS หรือทำการแมปใหม่ Postgres ให้ใช้ TCP แทนซ็อกเก็ตโดเมนตามที่ระบุไว้โดย @pilif ฉันได้เห็นวิธีแก้ไขปัญหาอื่นที่เกี่ยวข้องกับการสั่งซื้อเส้นทางเริ่มต้นใหม่ที่ระดับระบบเพื่อตรวจสอบเส้นทางของ Brew ก่อนเส้นทางหลักของระบบ แต่สิ่งนี้ดูอันตรายเพราะอาจส่งผลต่อการชนกันของชื่อแอปพลิเคชันอื่น ๆ ทั้งหมดเช่นนี้

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

  1. สำรองข้อมูลไฟล์ Postgres 8.4 ในไดเรกทอรีแยกต่างหาก
  2. symlink การติดตั้ง Brew ของ Postgres ให้เข้าที่

สิ่งนี้มาพร้อมกับข้อแม้ที่ว่า Postgres ที่เป็นค่าเริ่มต้นของระบบคืออะไรก็ตามที่ Brew ได้ทำการติดตั้งดังนั้นคุณต้องทำการเรียกวิจารณญาณว่าเหมาะสมกับคุณหรือไม่ ฉันไม่เห็นว่าตัวเองต้องการ Postgres 8.4 เฉพาะที่มากกว่า 9.x แต่เป็น YMMV


1

วิธีแก้ปัญหาอื่นที่เป็นไปได้สำหรับฉันคือการรีเซ็ตไฟล์ postmaster โดยการลบมัน เพียงแค่เรียกใช้:

rm /usr/local/var/postgres/postmaster.pid 

เป็นมูลค่าการตรวจสอบบันทึกข้อผิดพลาดที่คุณสามารถหาได้ที่นี่:

/usr/local/var/postgres/server.log

ข้อความแสดงข้อผิดพลาดที่ฉันมีคือ:

FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 161) running in data directory 
"/usr/local/var/postgres"?

ทุกอย่างทำงานได้ดีในภายหลัง


ฉันมีปัญหาเฉพาะจากบรรทัดคำสั่ง การลบไฟล์ /usr/local/var/postgres/postmaster.pid แก้ไขปัญหาของฉันได้
Michael A.

0

ในกรณีของฉันเซิร์ฟเวอร์ไม่เริ่มทำงานเนื่องจากการตั้งค่าหน่วยความจำที่แชร์ไม่ถูกต้อง ตอนแรกฉันสับสนเพราะมีกระบวนการ postgres หลายตัวที่ทำงานอยู่ แต่เป็นกระบวนการระบบมาตรฐาน มองหาpostmasterกระบวนการ!

ฉันทั้งหมดต้องทำคือการเปลี่ยนการตั้งค่าหน่วยความจำที่ใช้ร่วมกัน เดินเล่นไปรอบ ๆ ด้วยการตั้งค่าเส้นทางไม่จำเป็นในกรณีของฉัน



0

หากคุณต้องการการเปลี่ยนแปลงอย่างถาวรใน$ PATHให้ลอง:

defaults write $HOME/.MacOSX/environment PATH "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/opt/local/bin"

~/.MacOSX/environment.plistนี้จะเขียนของคุณ


0

ฉันใหม่สำหรับ Rails แต่การเพิ่มสิ่งต่อไปนี้ในdatabase.ymlเหมาะสำหรับฉัน:

host: localhost

port: 5432

ไม่แน่ใจว่าทำไม Rails เริ่มต้นกับซ็อกเก็ตโดเมนแทนที่จะเป็น TCP ในขณะที่ PostgreSQL ไม่ได้ตั้งค่าซ็อกเก็ตโดเมนโดยค่าเริ่มต้น


0

PostgreSQL ของฉันถูกติดตั้งใน / Library / PostgreSQL ดังนั้นสิ่งที่ / usr / var ใช้ไม่ได้สำหรับฉัน

ดูเหมือนว่า Woz นั้นถูกต้องเพราะทุกครั้งที่ฉันปิดฝา macbook pro มันจะล้มเหลว ... นี่คือสิ่งที่โพสต์ผิดพลาดสำหรับฉัน:

sudo su postgres -c "/Library/PostgreSQL/9.2/bin/pg_ctl -m fast -D /Library/PostgreSQL/9.2/data restart"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.