ไฟล์ซ็อกเก็ต“ /var/pgsql_socket/.s.PGSQL.5432” หายไปใน Mountain Lion (เซิร์ฟเวอร์ OS X)


95

ฉันเพิ่งอัปเกรดเซิร์ฟเวอร์ MacMini จาก Lion Server เป็น Mountain Lion โดยใช้ OS X Server ฉันมีปัญหาเดียวกันกับ PostgreSQL เมื่อปีที่แล้วตอนที่ติดตั้ง Lion Server ครั้งแรก

เมื่อฉันพยายามทำคำสั่งเทอร์มินัล PostgreSQL ใด ๆ ฉันได้รับข้อความแสดงข้อผิดพลาดที่มีชื่อเสียงดังต่อไปนี้ซึ่งหลายคนได้รับในช่วงหลายปีที่ผ่านมา:

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 เมื่อได้รับข้อผิดพลาด ฉันลองหลายคำสั่ง แต่มีข้อผิดพลาดเดียวกัน ฉันเพิ่งรีบูตเซิร์ฟเวอร์ แต่ไม่มีโชค ฉันเข้าสู่ระบบในฐานะรูทเพื่อดู / var / pgsql_socket และโฟลเดอร์ว่างเปล่า โฟลเดอร์ / var / pgsql_socket_alt ยังว่างเปล่า

ฉันตรวจสอบออนไลน์เกี่ยวกับเรื่องนี้แล้ว อย่างไรก็ตามเกี่ยวกับโซลูชันทั้งหมดที่ฉันได้อ่านรวมถึงใน Stack Overflow แนะนำให้ลบและติดตั้ง PostgreSQL ใหม่ ฉันไม่รู้ แต่ดูเหมือนจะไม่เป็นตัวเลือกที่น่าเชื่อถือเพราะหลายตัวเลือกในเซิร์ฟเวอร์แอพใช้ PostgreSQL ฉันติดต่อฝ่ายสนับสนุนของ Apple Enterprise (ไม่มีข้อตกลง) และฉันได้รับแจ้งว่าปัญหาของฉันจะต้องได้รับการแก้ไขโดยนักพัฒนาซึ่งมีค่าใช้จ่าย $ 695

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

อัปเดต: 13/12/2555 15:33 GMT-6

นี่คือผลลัพธ์ของฉันสำหรับ ps auwx | grep postg:

_postgres      28123   0.0  0.1  2479696   7724   ??  Ss    3:01PM   0:00.04 /Applications/Server.app/Contents/ServerRoot/usr/bin/postgres_real -D /Library/Server/PostgreSQL For Server Services/Data -c listen_addresses= -c log_connections=on -c log_directory=/Library/Logs/PostgreSQL -c log_filename=PostgreSQL_Server_Services.log -c log_line_prefix=%t  -c log_lock_waits=on -c log_statement=ddl -c logging_collector=on -c unix_socket_directory=/Library/Server/PostgreSQL For Server Services/Socket -c unix_socket_group=_postgres -c unix_socket_permissions=0770
server1        28216   0.0  0.0  2432768    620 s000  R+    3:02PM   0:00.00 grep postg
_postgres      28138   0.0  0.0  2439388    752   ??  Ss    3:01PM   0:00.01 postgres: stats collector process                           
_postgres      28137   0.0  0.0  2479828   1968   ??  Ss    3:01PM   0:00.00 postgres: autovacuum launcher process                           
_postgres      28136   0.0  0.0  2479696    544   ??  Ss    3:01PM   0:00.00 postgres: wal writer process                           
_postgres      28135   0.0  0.0  2479696    732   ??  Ss    3:01PM   0:00.01 postgres: writer process                           
_postgres      28134   0.0  0.0  2479696    592   ??  Ss    3:01PM   0:00.00 postgres: checkpointer process                           
_postgres      28131   0.0  0.0  2439388    368   ??  Ss    3:01PM   0:00.00 postgres: logger process 

อัปเดต: 13/12/2555 18:10 GMT-6

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

http://www.youtube.com/watch?v=y1c7WFMMkZ4


22
ปัญหาของคุณเกิดขึ้นจากข้อเท็จจริงที่ว่า PostgreSQL เวอร์ชันที่ติดตั้งไว้ล่วงหน้าของ Mac OS X psqlอยู่ในPATHเวอร์ชันก่อนที่คุณจะติดตั้ง พวกเขามองหาซ็อกเก็ตยูนิกซ์ในที่ต่างๆ ใช้ tcp / ip โดยระบุ-h localhostหรือควรแก้ไขของคุณPATHเพื่อให้psqlพบความถูกต้องก่อน การตัดสินใจที่แปลกประหลาดของ Apple ไม่เพียง แต่รวม PostgreSQL เท่านั้น แต่ยังยุ่งอยู่กับมันด้วยเหตุนี้จึงทำให้สิ่งต่าง ๆ ในสถานที่ที่ไม่ได้มาตรฐานเป็นสาเหตุของปัญหา
Craig Ringer

3
มีปัญหาเกิดขึ้นอย่างต่อเนื่องใน OSX ซึ่งผู้จัดทำแพ็กเกจตัดสินใจที่จะวางซ็อกเก็ตยูนิกซ์โดเมนไว้ที่อื่นที่แตกต่างจากปกติ ให้ฉันค้นหา ... BRB ... stackoverflow.com/a/8482546/905902
wildplasser

ฉันคัดลอก PATH เก่าใน. bashrc ฉันยังไม่ได้ติดตั้ง postgreSQL เวอร์ชันอื่น นี่คือคำสั่ง PATH ของฉันซึ่งมีรหัสสำหรับ RVM ถ้ามีใครสามารถบอกฉันได้ว่าจะเปลี่ยนอะไรฉันจะทำอย่างนั้น เมื่อฉันทำ psql ใดจะพบใน / usr / bin / psql ขอบคุณมากสำหรับความช่วยเหลือของคุณ PATH = "$ PATH: $ HOME / .rvm / bin: / usr / bin / psql: / usr / local: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin" ฉันกำลังค้นหาไฟล์ซ็อกเก็ตในขณะที่ล็อกอินด้วยรูท
Pamela Cook - LightBe Corp

1
สำหรับผู้ใช้homebrewและosx@CraigRinger brew doctorอาจจะมีคำตอบที่เหมาะสมสำหรับคุณยืนยันด้วย
Karthik T

คำตอบ:


301

ฉันสามารถเพิ่มสิ่งต่อไปนี้ใน. bash_profile ของฉันเพื่อป้องกันข้อผิดพลาด:

export PGHOST=localhost

ใช้งานได้เนื่องจาก :

ถ้าคุณละชื่อโฮสต์ psql จะเชื่อมต่อผ่านซ็อกเก็ต Unix-domain ไปยังเซิร์ฟเวอร์บนโลคัลโฮสต์หรือผ่าน TCP / IP ไปยัง localhost บนเครื่องที่ไม่มีซ็อกเก็ต Unix-domain

ระบบปฏิบัติการของคุณรองรับซ็อกเก็ตโดเมน Unix แต่ซ็อกเก็ต Unix ของ PostgreSQL ที่psqlต้องการไม่มีอยู่หรืออยู่ในตำแหน่งที่ตั้งอื่นจากที่คาดไว้

การระบุชื่อโฮสต์อย่างชัดเจนเพื่อlocalhostบังคับpsqlให้ใช้ TCP / IP การตั้งค่าตัวแปรสภาพแวดล้อมPGHOSTเป็นวิธีหนึ่งในการบรรลุเป้าหมายนั้น มันเป็นบันทึกไว้ในคู่มือของ psql


37
สำหรับใครก็ตามที่ใช้แอพ Rails: คุณสามารถระบุโฮสต์ใน database.yml
dwhalen

12
นี่คือคาถาอะไร? ฉันหมายถึงอย่างจริงจัง คุณช่วยอธิบายได้ไหม
Sreejith Ramakrishnan

1
ฉันมักจะกลับมาหาคำตอบนี้! ช่วยชีวิตฉันอีกครั้ง ข้อมูลโค้ดนี้จริงๆเป็นในหน้านี้postgresapp.com/documentation/cli-tools.html
sambecker

1
ฉันไม่ทำไม แต่มันเหมาะกับฉัน! ฉันพบปัญหานี้ในราง 5 เมื่อฉันใช้ 'rail db: create' แต่ฉันได้ตั้งค่าhost: localhostใน database.yml แล้ว @dwhalen
Spark.Bao

1
สิ่งนี้ใช้ได้กับ Rails 5.2 โดยไม่ต้องแก้ไขdatabase.ymlเมื่อข้อผิดพลาดนี้ปรากฏขึ้นหลังจากปรับลดรุ่น Postgres เป็นเวอร์ชันที่จัดการโดย Homebrew ที่เก่ากว่า
SexxLuthor

37

ลองวางในคอนโซลสิ่งนี้:

$ mkdir /var/pgsql_socket/ 

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

ในที่สุดฉันก็ได้คำตอบนี้
Abs

ดี. แม้ว่าฉันคิดว่าฉันรู้ว่าเหตุใดจึงได้ผลคำอธิบายเพิ่มเติมเล็กน้อยก็น่าจะเป็นประโยชน์ โซลูชันนี้ดีกว่าคำตอบที่ยอมรับเพียงรายละเอียดหายไป
Glutexo

23

ฉันสามารถแก้ไขได้โดยเพียงแค่กรอก 127.0.0.1 สำหรับที่อยู่โฮสต์ PostgreSQL แทนที่จะปล่อยว่างไว้ (ตัวอย่าง Django)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'database_name',
        'USER': 'database_user',
        'PASSWORD': 'pass',
        'HOST': '127.0.0.1',
        'PORT': '',
        }
}

1
ตอนนี้ฉันรู้สึกโง่มากฉันพยายามแก้ไขปัญหานี้มาประมาณ 2 วันแล้ว ใน Windows ฉันใช้ '127.0.0.1' แต่จากนั้นฉันก็ย้ายรหัสไปใช้งานจริง (Debian 7) และต้องเปลี่ยนเป็น '' เป็นเรื่องแปลกที่พวกเขาให้ข้อความแสดงข้อผิดพลาดที่ทำให้คนเชื่อว่าปัญหาอาจอยู่ที่อื่น
fang_dejavu

10

เปิด 'postgresql.conf' ในโปรแกรมแก้ไขที่คุณชื่นชอบ มองหาตัวแปร 'unix_socket_directories' ซึ่งมักจะมีลักษณะดังนี้:

unix_socket_directories = '/private/tmp/'

เปลี่ยนบรรทัดเป็น:

unix_socket_directories = '/var/pgsql_socket/'

สังเกตว่าคุณต้องการให้ไฟล์ซ็อกเก็ตในมากกว่าหนึ่งไดเร็กทอรีคอมมาแยกไฟล์เหล่านั้น


สิ่งนี้มีผลตามที่ต้องการในการพยายามสร้างซ็อกเก็ตที่อื่น แต่เซิร์ฟเวอร์ไม่เริ่มทำงานเนื่องจากไม่มีสิทธิ์สร้างไฟล์ในไดเร็กทอรี / var ฉันลงเอยด้วยการเปลี่ยนไฟล์กำหนดค่าในระดับที่สูงขึ้นเพื่อใช้ซ็อกเก็ตที่เดิม พริตตี้มากที่สุดเท่าที่ได้รับในคำตอบนี้stackoverflow.com/a/29511357/1535177
Eosis

9

วิธีแก้ปัญหาที่ง่ายกว่ามาก (ขอบคุณhttp://daniel.fone.net.nz/blog/2014/12/01/fixing-connection-errors-after-upgrading-postgres/ ) ฉันได้อัปเกรดเป็น postgres 9.4 ในกรณีของฉันสิ่งที่ฉันต้องทำ (หลังจาก googling มาทั้งวันและไม่ประสบความสำเร็จ)

gem uninstall pg
gem uninstall activerecord-postgresql-adapter
bundle install

รีสตาร์ท webrick และเสร็จสิ้น!


7

ตามที่ผู้อื่นกล่าวไว้ในความคิดเห็นวิธีแก้ปัญหานี้ง่ายมากคือการประกาศ 'โฮสต์' ฐานข้อมูลภายในการกำหนดค่าฐานข้อมูล การเพิ่มคำตอบนี้เพื่อให้ชัดเจนขึ้นสำหรับทุกคนที่อ่านข้อความนี้

ในแอป Ruby on Rails เช่นแก้ไข /config/database.yml:

development:
  adapter: postgresql
  encoding: unicode
  database: database_name
  pool: 5
  host: localhost

หมายเหตุ: เพิ่มบรรทัดสุดท้ายเพื่อระบุโฮสต์ ก่อนที่จะอัปเดตเป็น Yosemite ฉันไม่จำเป็นต้องระบุโฮสต์ด้วยวิธีนี้

หวังว่านี่จะช่วยใครบางคนได้

ไชโย


ฉันต้องการตั้งค่าโฮสต์ของฉันเป็นไดเร็กทอรีที่ฉันพบว่ามี.s.PGSQL.5432ไฟล์
Eosis

5

ตรวจสอบสถานะของฐานข้อมูล:

service postgresql status

หากฐานข้อมูลไม่ทำงานให้เริ่มต้น db:

sudo service postgresql start

ติดอยู่กับข้อผิดพลาดข้างต้นและแก้ไขได้โดยเริ่มต้น db
Sivakumar RJ

4

คุณสามารถตรวจสอบไฟล์ postgresql.conf ของคุณได้หรือไม่?

โพสต์เกรสของคุณกำลังทำงานอยู่ที่พอร์ตใด ??

ฉันคิดว่ามันไม่ได้ทำงานบนพอร์ต 5432 หากไม่เปลี่ยนเป็น 5432

หรือในการใช้เทอร์มินัล

psql -U  postgres -p YOUR_PORT_NUMBER database_name

1
ฉันไม่สามารถเรียกใช้คำสั่งเทอร์มินัลได้ ฉันได้รับข้อผิดพลาดเดียวกัน ฉันต้องการความช่วยเหลือว่าจะหาไฟล์ postgresql.conf ได้ที่ไหน ฉันเคยมีโฟลเดอร์ / var / pgsql เมื่อเรียกใช้ Lion Server ฉันเดาว่าตอนนี้หายไปแล้ว ฉันเพิ่งโพสต์ผลลัพธ์ของฉันสำหรับคำสั่ง ps grep ฉันเปิดบริการ Wiki เพื่อเรียกใช้ PostgreSQL ฉันได้รับแจ้งว่าฉันสามารถใช้คำสั่ง sudo serveradmin โดยไม่ต้องเปิดบริการแอปเซิร์ฟเวอร์ใด ๆ แต่ใช้งานไม่ได้ ตอนนี้ฉันล็อกอินด้วยรูทดังนั้นฉันควรจะทำอะไรก็ได้ :) ฉันตรวจสอบพอร์ตในยูทิลิตี้เครือข่าย 5432 ไม่ได้ใช้
Pamela Cook - LightBe Corp

2

ฉันมีปัญหากับ Django นี้

แก้ไขโดยตั้งชื่อโฮสต์ของคุณเป็น "localhost" อย่างชัดเจน


2

ฉันพูดโดยทำสิ่งนี้:

dpkg-reconfigure locales

และเลือกสถานที่ที่คุณต้องการ

pg_createcluster 9.5 main --start

(9.5 คือ postgresql เวอร์ชันของฉัน)

/etc/init.d/postgresql start

แล้วก็คำ!

sudo su - postgres
psql

1

หากคุณมีปัญหาข้างต้น แต่คุณได้อัปเกรดจาก Yosemite แล้วจำเป็นต้องใช้แนวทางอื่นเนื่องจากโซลูชันการอัปเกรดสามารถทำลายไฟล์บางไฟล์ได้ รายละเอียดเพิ่มเติมที่`pg_tblspc` หายไปหลังจากการติดตั้งรุ่นล่าสุดของ OS X (โยเซมิตีหรือ El Capitan)



1
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"?

ฉันยังคงได้รับข้อผิดพลาดข้างต้นและวิธีแก้ไขปัญหาข้างต้นไม่ได้ผลสำหรับฉัน ในที่สุดวิธีแก้ปัญหาต่อไปนี้ก็แก้ปัญหาของฉันบน Mac OS X

ติดตั้ง postgres โดยใช้เบียร์

brew install postgres

ติดตั้งบริการชง

brew tap homebrew/services

เพื่อเริ่ม postgres เป็นบริการพื้นหลัง

brew services start postgresql

หากต้องการหยุด postgres ด้วยตนเอง

brew services stop postgresql

เรายังสามารถใช้บริการชงเพื่อรีสตาร์ท Postgres

brew services restart postgresql

1

ตรวจสอบว่าเซิร์ฟเวอร์ postgres ทำงานด้วยรหัสต่อไปนี้

sudo service postgresql status

หากเซิร์ฟเวอร์ postgres ไม่ทำงานให้เขียนคำสั่งต่อไปนี้

sudo service postgresql start

1

ฉันได้รับข้อผิดพลาดนี้หลังจากคอมพิวเตอร์ของฉันค้างและรีบูตด้วยตัวเอง วิธีการแก้ปัญหาสำหรับผมที่ไม่พบในหน้านี้แทนที่จะอีกมากการจัดอันดับสูงคำถามเพื่อให้มีข้อผิดพลาดเดียวกันpsql: ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์: ไม่มีแฟ้มหรือไดเรกทอรีดังกล่าว (Mac OS X) คำตอบ: เพียงแค่ลบไฟล์นี้/usr/local/var/postgres/postmaster.pidจากนั้นbrew services restart postgresqlทำการหลอกลวง ระวังคำเตือนเกี่ยวกับคำตอบที่เชื่อมโยงเกี่ยวกับการฆ่ากระบวนการ postgres ก่อนที่จะทำสิ่งนี้คุณอาจทำให้ฐานข้อมูลของคุณเสียหายอย่างถาวร


1

สำหรับแอป RubyOnRails ให้เพิ่มlocalhost หากคุณใช้เวอร์ชัน Postgresql ที่กำหนดเอง

# config/database.yml
default: &default
  host: localhost

นี่คือวิธีแก้ปัญหาในการย้ายจากซ็อกเก็ตยูนิกซ์ไปยังซ็อกเก็ตเครือข่าย ทางออกที่ดีกว่าคือการคอมไพล์ postrgres gem pg ใหม่เพื่อให้ตรงกับการเปลี่ยนแปลงบน postrgesql เนื่องจากการอัพเกรดหรือการเปลี่ยนแปลงใด ๆ :gep pristine pg
Fa11enAngel

0

สิทธิ์ของไฟล์มีข้อ จำกัด บนฐานข้อมูล Postgres ที่ Mac OS เป็นเจ้าของ สิทธิ์เหล่านี้จะถูกรีเซ็ตหลังจากรีบูตหรือรีสตาร์ท Postgres: เช่น serveradmin start postgres

ดังนั้นรีเซ็ตการอนุญาตหรือการเป็นเจ้าของชั่วคราว:

sudo chmod o+rwx /var/pgsql_socket/.s.PGSQL.5432
sudo chown "webUser"  /var/pgsql_socket/.s.PGSQL.5432

การรีเซ็ตสิทธิ์ไม่ปลอดภัยดังนั้นให้ติดตั้งฐานข้อมูลเวอร์ชันที่คุณเป็นเจ้าของเพื่อหาแนวทางแก้ไข


0

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

http://www.youtube.com/watch?v=y1c7WFMMkZ4

เมื่อฉันทำเช่นนี้ฉันเห็นไฟล์ที่มี. lock เป็นนามสกุล อย่างไรก็ตามฉันยังคงได้รับข้อผิดพลาดเมื่อพยายามเริ่ม Rails Server เมื่อฉันกลับมาทำงานกับแอปพลิเคชัน Rails โดยใช้ PostgreSQL ครั้งนี้ฉันได้รับข้อผิดพลาดถูกปฏิเสธการอนุญาต นี่คือตอนที่ฉันจำได้ว่าไม่เพียง แต่ฉันต้องเปลี่ยน listen_addresses ใน plist แต่ฉันยังต้องเปลี่ยน unit_socket_permissions เป็น 0777 ฉันยังลงชื่อเข้าใช้ในฐานะ root เพื่อเปลี่ยนสิทธิ์ในโฟลเดอร์ var / pgsql_socket ซึ่งฉันสามารถเข้าถึงได้ที่ ระดับผู้ใช้ Postgres ทำงานได้ดีในขณะนี้ ฉันอยู่ระหว่างการโหลดข้อมูลใหม่จากการสำรองข้อมูล SQL ของฉัน

สิ่งที่ฉันไม่เข้าใจก็คือเมื่อฉันเปิด wiki บน PostgreSQL นั้นคาดว่าจะใช้งานได้เมื่อฉันทำ sudo serveradmin fullstatus postgres แต่ฉันยังคงได้รับข้อผิดพลาด โอ้ดี.


0

ฉันเพิ่งสร้างคลัสเตอร์ใหม่และใช้ได้ผลสำหรับฉันฉันใช้ (PostgreSQL) 9.3.20:

sudo pg_createcluster 9.3 main --start

0

ก่อนอื่นให้ลบ postgres ที่ติดตั้ง:

sudo apt-get purge postgr*
sudo apt-get autoremove

จากนั้นติดตั้ง 'synaptic':

sudo apt-get install synaptic
sudo apt-get update

จากนั้นติดตั้ง Postgres

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