Postgres ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์


415

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

นี่เป็นข้อความแสดงข้อผิดพลาด (ฉันยังได้รับข้อความแสดงข้อผิดพลาดนี้เมื่อฉันพยายาม rake db: migrate ด้วย)

$ psql
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

ฉันจะแก้มันได้อย่างไร

เวอร์ชั่น Mac: Lion Mountain

รุ่น homebrew: 0.9.3

รุ่น postgres: psql (PostgreSQL) 9.2.1

และนี่คือสิ่งที่ฉันทำ

12:30 ~/D/works$ brew uninstall postgresql
Uninstalling /usr/local/Cellar/postgresql/9.2.1...
12:31 ~/D/works$ brew uninstall postgresql
Uninstalling /usr/local/Cellar/postgresql/9.1.4...
12:31 ~/D/works$ psql --version
bash: /usr/local/bin/psql: No such file or directory
12:33 ~/D/works$ brew install postgresql
==> Downloading http://ftp.postgresql.org/pub/source/v9.2.1/postgresql-9.2.1.tar.bz2
Already downloaded: /Library/Caches/Homebrew/postgresql-9.2.1.tar.bz2
......
......
==> Summary
/usr/local/Cellar/postgresql/9.2.1: 2814 files, 38M, built in 2.7 minutes
12:37 ~/D/works$ initdb /usr/local/var/postgres -E utf8
The files belonging to this database system will be owned by user "laigary".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.UTF-8".
The default text search configuration will be set to "english".

initdb: directory "/usr/local/var/postgres" exists but is not empty
If you want to create a new database system, either remove or empty
the directory "/usr/local/var/postgres" or run initdb
with an argument other than "/usr/local/var/postgres".
12:39 ~/D/works$ mkdir -p ~/Library/LaunchAgents
12:39 ~/D/works$   cp /usr/local/Cellar/postgresql/9.2.1/homebrew.mxcl.postgresql.plist ~/Library/LaunchAgents/
12:39 ~/D/works$   launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
homebrew.mxcl.postgresql: Already loaded
12:39 ~/D/works$ pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
server starting
12:39 ~/D/works$ env ARCHFLAGS="-arch x86_64" gem install pg
Building native extensions.  This could take a while...
Successfully installed pg-0.14.1
1 gem installed
12:42 ~/D/works$ psql --version
psql (PostgreSQL) 9.2.1
12:42 ~/D/works$ psql
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

ตอนนี้หลังจากที่ฉันติดตั้ง howbrew อีกครั้งเมื่อฉันใช้$ psqlมันจะไม่แสดงข้อความข้อผิดพลาดใด ๆ

แต่ฉันทำงานrake db:migrateในแอพทางรถไฟของฉันมันแสดง:

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"?
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/postgresql_adapter.rb:1213:in `initialize'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/postgresql_adapter.rb:1213:in `new'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/postgresql_adapter.rb:1213:in `connect'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/postgresql_adapter.rb:329:in `initialize'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `new'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `postgresql_connection'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:309:in `new_connection'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:319:in `checkout_new_connection'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:241:in `block (2 levels) in checkout'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:236:in `loop'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:236:in `block in checkout'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:233:in `checkout'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:96:in `block in connection'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:95:in `connection'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:404:in `retrieve_connection'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_specification.rb:170:in `retrieve_connection'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_specification.rb:144:in `connection'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/railties/databases.rake:107:in `rescue in create_database'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/railties/databases.rake:51:in `create_database'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/railties/databases.rake:40:in `block (3 levels) in <top (required)>'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/railties/databases.rake:40:in `each'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/railties/databases.rake:40:in `block (2 levels) in <top (required)>'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/task.rb:205:in `call'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/task.rb:205:in `block in execute'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/task.rb:200:in `each'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/task.rb:200:in `execute'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/task.rb:158:in `block in invoke_with_call_chain'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/task.rb:151:in `invoke_with_call_chain'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/task.rb:144:in `invoke'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:116:in `invoke_task'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:94:in `block (2 levels) in top_level'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:94:in `each'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:94:in `block in top_level'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:133:in `standard_exception_handling'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:88:in `top_level'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:66:in `block in run'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:133:in `standard_exception_handling'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:63:in `run'
/usr/local/bin/rake:32:in `<main>'
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "database"=>"riy_development", "pool"=>5, "username"=>nil, "password"=>nil}

ในที่สุดฉันก็พบทางออก

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

วิธีนี้แก้ยากเล็กน้อย แต่ใช้งานได้ หวังว่าทุกคนจะมีทางออกที่ดีกว่า

ปรับปรุง

มันก็ใช้ได้สำหรับฉันเช่นกัน

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

3
ฉันมีปัญหาเดียวกันของคุณแน่นอน แต่วิธีการแก้ปัญหาของคุณไม่ได้ผลสำหรับฉัน ฉันคิดว่านี่เป็นปัญหาสิทธิ์ แต่ฉันไม่มีความรู้เกี่ยวกับสิทธิ์ของไฟล์ในการแก้ไข
ajbraus

สำหรับผู้ที่ติดตั้ง PG ผ่าน Homebrew และมีปัญหาฉันพบคำตอบอื่น เพียงถอนการติดตั้ง pg gem และติดตั้งใหม่กับ Homebrew configs ดูคำตอบที่stackoverflow.com/a/19609228/1072058
zquintana

คำตอบที่คล้ายกันที่นี่ - stackoverflow.com/questions/13573204/…
VelLes

1
เริ่ม postgres
atw

4
อัปเกรดที่มีอยู่ของคุณเป็นเวอร์ชันที่ใหม่กว่าด้วยคำสั่งต่อไปนี้ brew postgresql-upgrade-database

คำตอบ:


799

มีปัญหาคล้ายกัน; ไฟล์ pid กำลังบล็อก postgres ไม่ให้เริ่มทำงาน วิธีแก้ไข:

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

และจากนั้นทั้งหมดเป็นอย่างดี


4
สิ่งนี้ใช้ได้กับฉันใน OSX Mavericks หลังจากเห็นปัญหานี้เมื่ออัปเดต / รีสตาร์ท
eprothro

3
@jstafford ขอบคุณฉันแก้ไขไปแล้ว! :) วิธีแก้ปัญหาคือถอนการติดตั้งผ่าน homebew แล้วรีสตาร์ทคอมพิวเตอร์ทันทีดังนั้นฉันจะสามารถติดตั้ง postgres ได้อีกครั้ง เวอร์ชันเก่าทำงานในพื้นหลังการสร้างไฟล์และความขัดแย้งทุกครั้งที่ฉันพยายามติดตั้ง postgres ใหม่
betoharres

199
สิ่งนี้ไม่ได้ผลสำหรับฉันใน Mavericks:rm: /usr/local/var/postgres/postmaster.pid: No such file or directory
sscirrus

16
สิ่งนี้ใช้ได้กับฉันหลังจากลบฉันต้องเริ่ม postgres # pg_ctl -D / usr / local / var / postgres -l /usr/local/var/postgres/server.log เริ่มต้น
Ricardo Castañeda

12
ฉันขอแนะนำให้ปรับแต่งบันทึกเซิร์ฟเวอร์เพื่อให้แน่ใจว่านี่เป็นปัญหาจริง ๆ :tail /usr/local/var/postgres/server.log
Josh Bodah

255

บางครั้งอาจมีปัญหากับการอัพเกรด postgres

ในกรณีของฉันมันเกิดขึ้นเมื่ออัพเกรดจาก 9.3 เป็น 9.4

ดูhttp://www.postgresql.org/docs/9.4/static/upgrading.html

OS X / Homebrew:

ลองใช้postgres -D /usr/local/var/postgres- มันจะให้ผลลัพธ์ verbose มากขึ้นถ้า postgres ไม่สามารถเริ่มต้นได้

ในกรณีของฉันเรียกใช้rm -rf /usr/local/var/postgres && initdb /usr/local/var/postgres -E utf8ลบฐานข้อมูลเก่าของฉันแล้วเริ่มต้นใหม่ postgres db schema

ขอบคุณhttps://github.com/Homebrew/homebrew/issues/35240สำหรับการแก้ปัญหานั้น

หลังจากสร้างฐานข้อมูลใหม่ (พร้อมrake db:create) ทุกอย่างทำงานได้ดีอีกครั้ง


1
สิ่งนี้ใช้ได้สำหรับฉันเมื่อติดตั้ง homebrew postgres บน Yosemite
cpursley

7
หากการเรียกใช้postgres -D /usr/local/var/postgresบอกคุณว่าไดเรกทอรีข้อมูลนั้นเริ่มต้นด้วย Postgres รุ่นเก่าที่เข้ากันไม่ได้และคุณไม่ต้องการสูญเสียข้อมูลในเครื่องคุณอาจลองใช้กระทู้นี้
Nathan Long

หลังจากรันคำสั่งข้างต้นแล้วฉันก็วิ่ง: pg_ctl -D /usr/local/var/postgres -l logfile startจากนั้นเซิร์ฟเวอร์ของฉันก็เริ่มทำงานใน
โหมดแบ็คกราวน์

5
ใช้brew services start postgresบน OSX เพื่อเริ่ม postgres บนพื้นหลังแทนpostgres -D /usr/local/var/postgres
Mike Andrianov

1
@ coffekid ฉันมีปัญหาเดียวกันและแก้ไขด้วยคำแนะนำที่นี่: stackoverflow.com/questions/24379373/…
Micah Walter

68

พบวิธีแก้ปัญหาที่เหมาะกับฉันที่นี่:

/dba/75214/psql-could-not-connect-to-server-no-such-file-or-directory

โดยทั่วไปคุณเรียกใช้คำสั่งต่อไปนี้เพื่อเริ่มเซิร์ฟเวอร์ด้วยตนเอง:

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

8
จากคำตอบทั้งหมดนี่เป็นคำตอบเดียวที่เหมาะกับฉัน ใช้ El Capitan
Patrick_870206

ฉันได้ลองใช้คำสั่งนั้น แต่ไม่ได้ผลสำหรับฉัน !!
Harshit Trivedi

41

หากการติดตั้งและการถอนการติดตั้ง postgres ด้วย brew ไม่ทำงานให้คุณดูบันทึกของการติดตั้ง postgresql ของคุณหรือ:

postgres -D /usr/local/var/postgres

หากคุณเห็นผลลัพธ์ประเภทนี้:

LOG:  skipping missing configuration file "/usr/local/var/postgres/postgresql.auto.conf"
FATAL:  database files are incompatible with server
DETAIL:  The data directory was initialized by PostgreSQL version 9.4, which is not compatible with this version 9.6.1.

จากนั้นลองทำสิ่งต่อไปนี้:

rm -rf /usr/local/var/postgres && initdb /usr/local/var/postgres -E utf8

จากนั้นเริ่มเซิร์ฟเวอร์:

pg_ctl -D /usr/local/var/postgres -l logfile start

แหล่ง


2
ใช้งานได้เมื่อเหตุผลนั้นแตกต่างจากคำตอบที่ยอมรับเช่นไฟล์ฐานข้อมูลเข้ากันไม่ได้กับเวอร์ชันปัจจุบัน เนื่องจากว่าเป็นปัญหาของฉันฉัน upvote
Falk Schuetzenmeister

1
คำสั่งนี้ใช้ได้สำหรับฉัน
Ccr

ทำงานให้กับ Mojave 10.14.6
Sgryt87

34

บน Yosemite หากไฟล์ pid กำลังบล็อก Postgres ไม่ให้เริ่มต้นและคุณมีlaunchctldaemon พยายาม (และล้มเหลว) เพื่อโหลด daemons ฐานข้อมูลคุณจะต้องยกเลิกการโหลดไฟล์ plist:

$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

จากนั้นลบไฟล์ pid

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

จากนั้นรีโหลดlaunchctldaemon

$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

28

สำหรับทุกคนที่อ่านข้อความนี้และใช้ Postgres.app คุณอาจต้องใช้host: localhostใน database.yml ของคุณ http://postgresapp.com/documentation#toc_3


การทำเช่นนี้เป็นการเปลี่ยนแปลงการเชื่อมต่อจากซ็อกเก็ตเป็นการเชื่อมต่อ TCP ซึ่งอาจมีผลกระทบเชิงลบ ดูstackoverflow.com/questions/6770649/…
Brett Bim

1
อืมจริงๆแล้วถ้าคุณออกเสียงลงคะแนน ... อาจจะไม่พูดทำไม meta.stackoverflow.com/questions/252297/…หรืออาจจะพูดว่าทำไม แต่ออกจากระบบก่อนเพื่อให้คุณไม่ระบุชื่อ
David Winiecki

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

ลิงค์ดูเหมือนจะไม่เจาะจงเลย (และการค้นหา "localhost" ในอดีตไม่มีผลลัพธ์) แต่สิ่งนี้เพิ่งแก้ไขปัญหาให้ฉันหลังจากผ่านไปหนึ่งชั่วโมง
sixty4bit

25

การอัพเกรดฐานข้อมูลใช้งานได้สำหรับฉัน

brew postgresql-upgrade-database


Tom ขอบคุณ Tomer! สิ่งนี้ใช้ได้กับฉัน 6/2/20 อัปเกรดจาก 9.4 เป็น 12 บน macOS Mojave 10.14.6
Rob Bednark


17

ตรวจสอบว่ามีไฟล์ซ็อกเก็ตอยู่

$ ls -l /tmp/.s.PGSQL.5432
srwxrwxrwx  1 you  wheel  0 Nov 16 09:22 /tmp/.s.PGSQL.5432

หากยังไม่ได้ตรวจสอบการเปลี่ยนแปลง postgresql.conf ของคุณสำหรับ unix_socket_directory

$ grep unix_socket /usr/local/var/postgres/postgresql.conf
#unix_socket_directory = ''     # (change requires restart)
#unix_socket_group = ''         # (change requires restart)
#unix_socket_permissions = 0777     # begin with 0 to use octal notation

1
นี่คือการตอบสนองคอมพิวเตอร์ของฉัน $ ls -l /tmp/.s.PGSQL.5432 ls: /tmp/.s.PGSQL.5432: No such file or directory $ grep unix_socket /usr/local/var/postgres/postgresql.conf #unix_socket_directory = '' # (change requires restart) #unix_socket_group = '' # (change requires restart) #unix_socket_permissions = 0777 # begin with 0 to use octal notation
Gary Lai

29
ในที่สุดฉันก็พบทางออก $ mkdir /var/pgsql_socket/ $ sudo mkdir /var/pgsql_socket/ $ ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/วิธีนี้แก้ยากเล็กน้อย แต่ใช้งานได้ หวังว่าทุกคนจะมีทางออกที่ดีกว่า
Gary Lai

เป็นคนดีมาก @GaryLai แปลกมากที่ฉันไม่ต้องทำแบบเดียวกันกับ homebrew postgresql ของฉัน
jrwren

2
สิ่งนี้อาจช่วยให้ผู้ใช้บางคนออกไปที่นั่น: github.com/mxcl/homebrew/issues/14527
AdamT

14

ปัญหายังสามารถนำมาประกอบกับกระบวนการที่ขัดข้องซึ่งทำให้ไฟล์ postmaster.pid อยู่ด้านหลัง ฉันทำสิ่งนี้และทำงาน:

$ brew services stop postgresql
$ rm /usr/local/var/postgres/postmaster.pid # adjust path accordingly to your install
$ brew services start postgresql

10

ปัญหาเกิดขึ้นเนื่องจากมีบริการที่ทำงานอยู่บนพอร์ต 5432 และเราไม่สามารถสร้างการเชื่อมต่อซ็อกเก็ต psql ผ่านพอร์ตนี้ได้

ฉันลบไฟล์ซ็อกเก็ต

rm -rf /tmp/.s.PGSQL.5432/

จากนั้นฉันเริ่มบริการ postgres ใหม่

postgres -D /usr/local/var/postgres

สิ่งนี้ใช้ได้สำหรับฉัน


8

วิธีพิสูจน์คนโง่ที่สุดในรอบนี้คือการทำ

brew reinstall postgresql

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


ทำงานเหมือนแชมป์ !!!! ทั้งหมดนี้เป็นสิ่งจำเป็น
Akash K

7

การเปลี่ยนการตั้งค่า postresql หรือ database.yml การเปลี่ยน $ PATH หรือการสร้าง symlink นั้นไม่จำเป็นสำหรับฉัน สิ่งที่ฉันต้องทำคือgem uninstall pgแล้วbundle(หรือgem install pg)

ปัญหาคืออัญมณี pg ได้รับการติดตั้งก่อน homebrew postgres ดังนั้นจึงรับการตั้งค่าจากรุ่น postgres ที่มาพร้อมกับ MacOS การติดตั้งใหม่อีกครั้ง (และการสร้างส่วนขยายดั้งเดิมขึ้นใหม่) แก้ไขปัญหาได้


แค่อยากจะบอกว่าขอบคุณ ฉันเพิ่งอัพเกรด PostgresApp บน macOS และแม้ว่าฉันสามารถเชื่อมต่อโดยใช้ psql ได้ แต่ฉันไม่สามารถเชื่อมต่อผ่านทางรางได้ ถอนการติดตั้งและติดตั้ง pg gem ใหม่เป็นเพียงตั๋ว! :)
craig1410

7

สิ่งนี้เกิดขึ้นกับฉันเมื่อฉันอัปเกรดจาก 9.3.4 เป็น 9.5 เนื่องจากฐานข้อมูลไม่เข้ากันโดยไม่ต้องอัปเกรด

ฉันใช้ pg_upgrade ดังนี้:

หยุด postgres

$ brew services stop postgresql

อัพเกรดฐานข้อมูล:

$ pg_upgrade \
   -d /usr/local/var/postgres \
   -D /usr/local/var/postgres9.5 \
   -b /usr/local/Cellar/postgresql/9.3.4/bin/ \
   -B /usr/local/Cellar/postgresql/9.5.0/bin/ \
   -v

เก็บฐานข้อมูลเก่า:

 $ mv /usr/local/var/postgres /usr/local/var/postgres9.3.save
 $ mv /usr/local/var/postgres9.5 /usr/local/var/postgres

รีสตาร์ท postgres:

 $ brew services start postgresql

อัปเดตพลอย (สำหรับเรล / บันทึกที่ใช้งาน):

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

คำแนะนำเหล่านี้ยังมีความcollectiveidea.com/blog/archives/2016/01/08/...และยังคงทำงานให้กับฉันในวันนี้เมื่ออัพเกรดจาก 9.4.0 ไป 9.6.3 ฉันไม่จำเป็นต้องทำอะไรกับไฟล์. pid ด้วยตนเอง
Jan Hettich

7

นี่คือสิ่งที่คุณควรจะทำ:

คุณควรดู /usr/local/var/postgres/postmaster.pid แทน

จากนั้นดูที่บรรทัดแรกของไฟล์ - นี่คือ PID ที่ไม่ดี

วิ่ง

ps aux | grep <PID>

ตัวอย่างเช่น:

ps aux | grep 12345

จากนั้นทำ

kill <PID>

ตัวอย่างเช่น

kill 12345

สมมติว่ามันยังคงทำงานอยู่

/superuser/553045/fatal-lock-file-postmaster-pid-already-exists

อย่าฟังคำตอบที่ยอมรับมันแย่และจะทำให้ข้อมูลของคุณเสียหาย !!!


ขอบคุณสิ่งนี้ใช้ได้สำหรับฉัน การลบ postmaster.pid ในคำตอบที่ยอมรับนั้นยังไม่เพียงพอ
Abe Petrillo

4

ตัวเลือก psql

-h ชื่อโฮสต์ - โฮสต์ = ชื่อโฮสต์

: ระบุชื่อโฮสต์ของเครื่องที่เซิร์ฟเวอร์กำลังทำงาน หากค่าเริ่มต้นด้วยเครื่องหมายสแลชจะใช้เป็นไดเร็กทอรีสำหรับซ็อกเก็ต Unix-domain

$ grep "port\|unix_socket" /etc/postgresql/9.1/main/postgresql.conf
port = 5433                                         # (change requires restart)
unix_socket_directory = '/var/run/postgresql'       # (change requires resta

$ netstat -nalp | grep postgres
unix  2      [ ACC ]     STREAM     LISTENING     106753   4349/postgres       /tmp/.s.PGSQL.5432
unix  2      [ ACC ]     STREAM     LISTENING     10377 1031/postgres       /var/run/postgresql/.s.PGSQL.5433

เรียกใช้ psql ด้วย -host Option

$ psql -p 5433 -h /var/run/postgresql

ไม่จำเป็นต้องทำการเชื่อมโยงที่อ่อนนุ่ม


4

มาข้ามปัญหานี้เกินไปใน MacOS เซียและเมื่อเราวิ่ง pg_ctl pg_ctl: no database directory specified and environment variable PGDATA unsetตามที่อธิบายไว้ข้างต้นเราก็มีข้อผิดพลาดดังต่อไปนี้ ดังนั้นเราจึงทำตามขั้นตอนที่นี่ซึ่งแก้ไขปัญหาของเราคือ:

mkdir ~/.postgres

initdb ~/.postgres

pg_ctl -D ~/.postgres start


4

หากติดตั้ง postgres โดยใช้ homebrew คุณสามารถแก้ไขได้โดยการเรียกใช้:

brew link postgres


4

หากคุณปิดระบบโดยไม่ออกจาก psql postgres จะไม่ลบไฟล์บางไฟล์

ฉันไม่พบไฟล์ postmaster.pid ในตำแหน่ง usr / local / var / postgres

ดังนั้นฉันทำด้านล่าง:

บริการชงเริ่ม postgresql

คำสั่งดังกล่าวจะช่วยให้คุณเริ่ม postgres


3

ฉันพบปัญหานี้หลังจากพยายามเรียกคืน / วาง / สร้างฐานข้อมูลในขณะที่กระบวนการอื่นกำลังเข้าถึงพวกเขา การแก้ไข MacOSX / Homebrew คือ:

  1. ใกล้ทุกกระบวนการการเข้าถึงอื่น ๆrails server, rails console, guardฯลฯ ...
  2. load / unload โดยใช้คำสั่งที่พบ brew info postgres
  3. เรียกคืน / วาง / สร้างจากก่อน

3

FWIW สิ่งนี้เกิดขึ้นกับฉันในวันนี้ แต่สิ่งที่เกิดขึ้นคือฉันกำลังใช้งานการอัปเดต Ubuntu ในเวลานั้นซึ่งน่าจะเป็นการอัปเดต Postgres เมื่อการอัปเดตเสร็จสิ้นฉันก็สามารถเชื่อมต่อได้โดยไม่ต้องผูกปม

เพื่อความสมบูรณ์ฉันพยายามดึงข้อมูลจากฐานข้อมูลจากคอนโซล Rails:

development (main):0 > a = MyModel.find 73694
PG::ConnectionBad: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

3

ดูเหมือนว่า psql ของคุณจะไม่ทำงาน คุณควรเรียกใช้ก่อนที่จะเชื่อมต่อ คุณสามารถทำได้โดยใช้ Postgres.app สำหรับ Mac OS เท่านั้น (ดาวน์โหลดและติดตั้งแอพนี้http://postgresapp.com ) เปิดแอพและคุณมีเซิร์ฟเวอร์ PostgreSQL พร้อมและรอการเชื่อมต่อใหม่ ปิดแอปแล้วเซิร์ฟเวอร์จะปิด นอกจากนี้คุณยังสามารถค้นหาข้อมูลได้ที่นี่http://www.postgresql.org/download/macosx/ หวังว่านี่จะช่วยคุณได้


1
แม้ว่าลิงก์นี้อาจตอบคำถามได้ดีกว่าหากรวมส่วนสำคัญของคำตอบไว้ที่นี่และให้ลิงก์สำหรับการอ้างอิง คำตอบสำหรับลิงก์เท่านั้นอาจไม่ถูกต้องหากหน้าเว็บที่เชื่อมโยงนั้นเปลี่ยนแปลง
Kmeixner

คำถามคือการอ้างถึงการติดตั้ง homebrew โดยเฉพาะและไม่ใช่การติดตั้ง Postgres.app แม้ว่าคำตอบนี้จะเป็นประโยชน์ แต่ก็ไม่ตอบคำถาม มันก็เหมือนกับการพูดว่า "ใช้ MySQL แทน"
ไบรอันเรียน

3

อาจเป็นเพราะเซิร์ฟเวอร์ก่อนหน้ายังคงทำงานอยู่ให้ลองปิดทุกอย่างลงแล้วรันแอปพลิเคชันของคุณอีกครั้ง


3

สำหรับผู้ที่ใช้คำสั่งนี้และไม่ทำงานหรือไม่มีไฟล์อยู่และกำลังใช้ Ruby on Rails

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

หรือคำสั่งอื่น ๆ และก็ล้มเหลว

ฉันแก้ไขปัญหานี้ได้ด้วยการถอนการติดตั้ง Brew ฉันต้องถอนการติดตั้งด้วยการชง 2 ครั้งเพราะในการถอนการติดตั้งครั้งแรกจะยังคงมีรุ่นอื่นของ postgresql ด้วยการถอนการติดตั้งครั้งที่สองกระบวนการจะเสร็จสมบูรณ์

ติดตั้ง postgresql ด้วย Brew

จากนั้นปล่อยสร้างและย้ายฐานข้อมูลของโครงการ

(อย่าลืมเริ่มเซิร์ฟเวอร์ postgresql)


3

ฉันมีปัญหาเดียวกันเพราะฉันใช้ชื่อผู้ใช้ของ Postgres ผิดในรหัส ฉันลงชื่อเข้าใช้ postgres psql -d postgresและป้อน\duชื่อบทบาทและแก้ไขชื่อผู้ใช้ของ Postgres

ดังนั้นเมื่อพวกคุณประสบปัญหานี้พวกคุณต้องให้แน่ใจว่าคุณใช้ชื่อผู้ใช้รหัสผ่านชื่อโฮสต์และฐานข้อมูลของ Postgres ที่ถูกต้อง ...

หวังว่านี่จะช่วยทุกคน


3

¿คุณเพิ่งเปลี่ยน pg_hba.conf ไหม หากคุณเพิ่งตรวจสอบการพิมพ์ผิดใน:

"local" ใช้สำหรับการเชื่อมต่อซ็อกเก็ตโดเมน Unix เท่านั้น

ท้องถิ่นรหัสผ่านทั้งหมด

การเชื่อมต่อท้องถิ่น IPv4:

โฮสต์รหัสผ่าน 127.0.0.1/32 ทั้งหมด

การเชื่อมต่อท้องถิ่น IPv6:

โฮสต์รหัสผ่านทั้งหมด :: 1/128 ทั้งหมด

บางครั้งความผิดพลาดง่าย ๆ ก็ทำให้เราปวดหัวได้ ฉันหวังว่าความช่วยเหลือนี้และขออภัยถ้าภาษาอังกฤษของฉันไม่ดีเลย


3

สิ่งนี้เกิดขึ้นเมื่อเซิร์ฟเวอร์ postgres ไม่ทำงาน ขั้นตอนในการติดตั้ง Postgres ผ่าน Homebrew บน MAC อย่างถูกต้อง:

  1. brew install postgres

  2. initdb /Users/<username>/db -E utf8 [นี้เริ่มต้น postgres เพื่อใช้ไดเรกทอรีที่กำหนดเป็นไดเรกทอรีฐานข้อมูล โดยทั่วไปจะไม่แนะนำให้ใช้ไดเรกทอรีผู้ใช้สำหรับการจัดเก็บฐานข้อมูล แก้ไขไฟล์ sudoers เพื่อเพิ่ม initdb และคำสั่งที่คล้ายกันจากนั้นเรียกใช้ initdb บน / usr / local / var / postgres]

  3. pg_ctl -D /Users/<username>/db -l logfile start [หลังจากประสบความสำเร็จในขั้นตอนที่ 2 มันจะแจ้งให้เรียกใช้ขั้นตอนที่ 3 คำสั่งนี้เริ่มต้นเซิร์ฟเวอร์ด้วยตนเอง]


2

ฉันได้รับข้อผิดพลาดเดียวกันนี้ ปรากฎว่า postgres ไม่ได้ทำงานเลย (โดยปกติจะทำงานในพื้นหลังเสมอ แต่ไม่ว่าด้วยเหตุผลใดก็ตามในปัจจุบัน)

หากเป็นกรณีนี้ให้พิมพ์postgresในบรรทัดคำสั่งของไดเรกทอรีโครงการของคุณ


2

หลังจากกลับไปกลับมาจำนวนมากมันลงมาเป็นpgรุ่นอัญมณีที่ฉันใช้ สำหรับ mavericks pgรุ่น0.15.1นั้นจะไม่เชื่อมต่อกับพอร์ต 5432 แต่รุ่นนั้น0.17.1ใช้ได้ดี - แปลกมาก

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