PG :: ConnectionBad - ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์: การเชื่อมต่อถูกปฏิเสธ


271

ทุกครั้งที่ฉันเรียกใช้เซิร์ฟเวอร์ Rails 4.0 ฉันจะได้รับผลลัพธ์นี้

Started GET "/" for 127.0.0.1 at 2013-11-06 23:56:36 -0500

PG::ConnectionBad - could not connect to server: Connection refused
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Connection refused
Is the server running on host "localhost" (fe80::1) and accepting
TCP/IP connections on port 5432?
:
 activerecord (4.0.0) lib/active_record/connection_adapters/postgresql_adapter.rb:825:in `connect'
 activerecord (4.0.0) lib/active_record/connection_adapters/postgresql_adapter.rb:542:in `initialize'
 activerecord (4.0.0) lib/active_record/connection_adapters/postgresql_adapter.rb:41:in `postgresql_connection'
 activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:440:in `new_connection'
 activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:450:in `checkout_new_connection'
 activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:421:in `acquire_connection'
 activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:356:in `block in checkout'
 /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize'
 activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:355:in `checkout'
 activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:265:in `block in connection'
 /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize'
 activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:264:in `connection'
 activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:546:in `retrieve_connection'
 activerecord (4.0.0) lib/active_record/connection_handling.rb:79:in `retrieve_connection'
 activerecord (4.0.0) lib/active_record/connection_handling.rb:53:in `connection'
 activerecord (4.0.0) lib/active_record/migration.rb:792:in `current_version'
 activerecord (4.0.0) lib/active_record/migration.rb:800:in `needs_migration?'
 activerecord (4.0.0) lib/active_record/migration.rb:379:in `check_pending!'
 activerecord (4.0.0) lib/active_record/migration.rb:366:in `call'
 actionpack (4.0.0) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
 activesupport (4.0.0) lib/active_support/callbacks.rb:373:in `_run__1613334440513032208__call__callbacks'
 activesupport (4.0.0) lib/active_support/callbacks.rb:80:in `run_callbacks'
 actionpack (4.0.0) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
 actionpack (4.0.0) lib/action_dispatch/middleware/reloader.rb:64:in `call'
 actionpack (4.0.0) lib/action_dispatch/middleware/remote_ip.rb:76:in `call'
 better_errors (0.9.0) lib/better_errors/middleware.rb:84:in `protected_app_call'
 better_errors (0.9.0) lib/better_errors/middleware.rb:79:in `better_errors_call'
 better_errors (0.9.0) lib/better_errors/middleware.rb:56:in `call'
 actionpack (4.0.0) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
 actionpack (4.0.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
 railties (4.0.0) lib/rails/rack/logger.rb:38:in `call_app'
 railties (4.0.0) lib/rails/rack/logger.rb:21:in `block in call'
 activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `block in tagged'
 activesupport (4.0.0) lib/active_support/tagged_logging.rb:25:in `tagged'
 activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `tagged'
 railties (4.0.0) lib/rails/rack/logger.rb:21:in `call'
 quiet_assets (1.0.2) lib/quiet_assets.rb:18:in `call_with_quiet_assets'
 actionpack (4.0.0) lib/action_dispatch/middleware/request_id.rb:21:in `call'
 rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'
 rack (1.5.2) lib/rack/runtime.rb:17:in `call'
 activesupport (4.0.0) lib/active_support/cache/strategy/local_cache.rb:83:in `call'
 rack (1.5.2) lib/rack/lock.rb:17:in `call'
 actionpack (4.0.0) lib/action_dispatch/middleware/static.rb:64:in `call'
 railties (4.0.0) lib/rails/engine.rb:511:in `call'
 railties (4.0.0) lib/rails/application.rb:97:in `call'
 rack (1.5.2) lib/rack/content_length.rb:14:in `call'
 thin (1.5.1) lib/thin/connection.rb:81:in `block in pre_process'
 thin (1.5.1) lib/thin/connection.rb:79:in `pre_process'
 thin (1.5.1) lib/thin/connection.rb:54:in `process'
 thin (1.5.1) lib/thin/connection.rb:39:in `receive_data'
 eventmachine (1.0.3) lib/eventmachine.rb:187:in `run'
 thin (1.5.1) lib/thin/backends/base.rb:63:in `start'
 thin (1.5.1) lib/thin/server.rb:159:in `start'
 rack (1.5.2) lib/rack/handler/thin.rb:16:in `run'
 rack (1.5.2) lib/rack/server.rb:264:in `start'
 railties (4.0.0) lib/rails/commands/server.rb:84:in `start'
 railties (4.0.0) lib/rails/commands.rb:78:in `block in <top (required)>'
 railties (4.0.0) lib/rails/commands.rb:73:in `<top (required)>'
 bin/rails:4:in `<main>'

ฉันใช้ Mavericks OS X 10.9 ดังนั้นฉันไม่รู้ว่านั่นเป็นปัญหาหรือไม่ ฉันลองทุกอย่างที่ทำได้ แต่ดูเหมือนไม่มีอะไรทำงาน ฉันถอนการติดตั้งและติดตั้งทั้ง postgres และ pg gem หลายครั้งแล้ว

นี่คือไฟล์ database.yml ของฉัน

development:
  adapter: postgresql
  encoding: unicode
  database: metals-directory_development
  pool: 5
  username: 
  password: 
  template: template0
  host: localhost
  port: 5432

test: &test
  adapter: postgresql
  encoding: unicode
  database: metals-directory_test
  pool: 5
  username: 
  password: 
  template: template0
  host: localhost
  port: 5432

staging:
  adapter: postgresql
  encoding: unicode
  database: metals-directory_production
  pool: 5
  username:
  password:
  template: template0
  host: localhost

production:
  adapter: postgresql
  encoding: unicode
  database: metals-directory_production
  pool: 5
  username:
  password:
  template: template0
  host: localhost

cucumber:
  <<: *test

2
ลองเพิ่ม 'โฮสต์: localhost' ใน database.yml ของคุณรับจากstackoverflow.com/a/10793186/919641
Surendra Bobba

1
@trajan ฉันทำอย่างนั้นแล้ว ฉันยังใช้หัวข้อนั้นเมื่อฉันเริ่มค้นคว้าหาวิธีแก้ปัญหา ฉันโพสต์ไฟล์ database.yml ของฉันแล้ว คุณสามารถดูได้ อาจช่วยได้
fadelakin

แสดง pg_hba.conf ของคุณ
Pronix

2
อย่าลืมเปิดแอพ postgres หากคุณใช้งาน
Pavan Katepalli

1
ขอบคุณที่เตือนให้ฉันเปิดแอพ @PavanKatepalli! โทรดี;)
catch22

คำตอบ:


638

มันอาจจะง่ายเหมือนไฟล์ PIDเก่าๆ มันอาจจะล้มเหลวอย่างเงียบ ๆ เพราะคอมพิวเตอร์ของคุณไม่เสร็จสิ้นกระบวนการปิดอย่างสมบูรณ์ซึ่งหมายความว่าpostgresไม่ได้ลบไฟล์PID (รหัสกระบวนการ)

ไฟล์ PID ถูกใช้โดย postgres เพื่อให้แน่ใจว่ามีเพียงอินสแตนซ์เดียวของเซิร์ฟเวอร์ที่ทำงานในเวลาเดียวกัน ดังนั้นเมื่อมันเริ่มต้นอีกครั้งมันล้มเหลวเพราะมีไฟล์PIDอยู่แล้วซึ่งบอกpostgresว่าอินสแตนซ์อื่นของเซิร์ฟเวอร์เริ่มทำงานแล้ว (แม้ว่ามันจะไม่ได้ทำงานอยู่มันก็ไม่ได้ปิดและลบ PID) .

  1. เพื่อแก้ไขลบ / เปลี่ยนชื่อไฟล์ PID ค้นหาไดเรกทอรีข้อมูล postgres บน MacOS ใช้ Homebrew จะเป็นใน/usr/local/var/postgres/หรือ/usr/local/var/log/ระบบอื่น ๆ /usr/var/postgres/ก็อาจจะมี
  2. เพื่อให้แน่ใจว่านี่เป็นปัญหาให้ดูที่ไฟล์บันทึก ( server.log) ในบรรทัดสุดท้ายคุณจะเห็น:

FATAL: ล็อกไฟล์ "postmaster.pid" มีอยู่แล้ว
คำแนะนำ: มีอีกหนึ่ง postmaster (PID 347) ที่กำลังทำงานในไดเรกทอรีข้อมูล "/ usr / local / var / postgres" หรือไม่?

  1. ถ้าเป็นเช่นนั้น rm postmaster.pid
  2. รีสตาร์ทเซิร์ฟเวอร์ของคุณ สำหรับ mac ที่ใช้ launchctl (พร้อม homebrew) คำสั่งต่อไปนี้จะรีสตาร์ทเซิร์ฟเวอร์

    launchctl unload homebrew.mxcl.postgresql.plist  
    launchctl load -w homebrew.mxcl.postgresql.plist

    หรือในBrewเวอร์ชันใหม่กว่า

    brew services restart postgresql

24
# 2 เป็นคำแนะนำที่ดี: "ตรวจสอบ server.log" FATAL: could not open directory "pg_tblspc": No such file or directoryข้อผิดพลาดของฉันที่เกิดขึ้นจริงโดยการอัพเกรดโยเซมิตีเข้าสู่ระบบเซิร์ฟเวอร์กล่าวว่า: คำตอบนี้ช่วยฉันด้วยปัญหาstackoverflow.com/questions/25970132/ …
Paul Kaplan

20
ฉันเพิ่งอัปเดตสิ่งนี้เพราะมันทำให้ฉันมากพอที่จะแก้ไขปัญหาสไตล์โลกที่ไหม้เกรียม ฉันถอนการติดตั้ง pg ( gem uninstall pg), ถอนการติดตั้ง postgres ( brew uninstall postgres) จากนั้นก็ทำการ nuked โฟลเดอร์ postgres ซึ่งกำลังค้างอยู่กับกลุ่มของสิ่งที่ค้างอยู่ใน ( rm -rf /usr/local/var/postgres) หลังจากรีบูตbrew install postgres, ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents, และlaunchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist ARCHFLAGS="-arch x86_64" gem install pgฉันไม่ทราบวิธีแก้ไขปัญหาอื่น ๆ ที่ฉันพยายามก่อนที่จะนำมาใช้งานได้
IAmNaN

2
ไฟล์ postmaster.opts เหมือนกับไฟล์ postmaster.pid หรือไม่
ARTLoe

31
สำหรับผู้ใช้ Brew รุ่นใหม่คำสั่ง # 4 คือbrew services restart postgresql
streetlogics

7
สำหรับฉัน (MAC, homebrew) ไฟล์บันทึกคือ/usr/local/var/log/postgres.log
DZack

44

หลังจากค้นหาและวิเคราะห์เป็นจำนวนมากฉันพบวิธีแก้ปัญหาหากคุณใช้ Ubuntu เพียงแค่เขียนคำสั่งนี้ในเทอร์มินัลแล้วกด Enter

sudo service postgresql restart

สิ่งนี้จะรีสตาร์ท PostgreSQL ของคุณฉันหวังว่านี่จะเป็นประโยชน์สำหรับคุณ


3
ขอบคุณ 1000 ครั้ง ฉันเพิ่งอัพเกรดอูบุนตูของฉันและมันได้รับการแก้ไขสำหรับฉัน
Mauricio Moraes

แม้ว่าคำถามจะอ้างถึง OSX Mavericks ข้อเสียนี้มีประโยชน์สำหรับการติดตั้ง Ubuntu เมื่อสิ่งที่แปลกประหลาดเกิดขึ้นในการโยกย้ายหรือการเริ่มต้นเซิร์ฟเวอร์
เจอโรม

39

ปัญหานี้เกิดขึ้นเมื่อ postgres ปิดตัวลงอย่างไม่เหมาะสม นี่คือวิธีที่ฉันแก้ไขปัญหานี้ในสามขั้นตอนง่ายๆ

ขั้นตอนที่ 1:ไปที่ไดเรกทอรี postgres ของคุณ

ผู้ใช้ Macจะพบในเรื่องนี้คนอื่นอาจมอง/usr/local/var/postgres/usr/var/postgres/

ขั้นตอนที่ 2:ลบ.pidไฟล์โดยใช้คำสั่งนี้

rm postmaster.pid

ขั้นตอนที่ 3:รีสตาร์ทเซิร์ฟเวอร์ของคุณ

ผู้ใช้ Mac

brew services restart postgresql

ผู้ใช้งาน Linux

sudo service postgresql restart

ในที่สุดก็เริ่มแอพของคุณใหม่และคุณก็พร้อมแล้ว


33

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

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

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

ที่ฉันพบที่นี่ (คำตอบของ pjammer ที่ด้านล่าง)


25

คุณติดตั้ง postgresql ในระบบของคุณหรือไม่? ถ้าไม่ได้แล้วดูการติดตั้ง PostgreSQL หลังจากที่คุณรวมpostgresqlเข้ากับระบบของคุณเรียบร้อยแล้วคุณสามารถพิมพ์สิ่งนั้นในเทอร์มินัลระบบของคุณ:

which psql
#=> /usr/bin/psql

หลังจากนั้นคุณต้องสร้างผู้ใช้และฐานข้อมูลใน postgresql ดังนี้:

sudo su - postgres
psql

จากนั้นคุณสามารถดูสิ่งต่อไปนี้ภายในเครื่องของคุณ

postgres=#

พิมพ์ที่นั่น:

CREATE USER yourname WITH PASSWORD 'passwordhere';
CREATE DATABASE metals-directory_production  WITH OWNER yourname;
GRANT ALL PRIVILEGES ON DATABASE metals-directory_production TO yourname;

database.ymlหลังจากที่คุณทำเช่นนี้แล้วคุณจะต้องแก้ไขของคุณ อาจเป็นเพราะคุณต้องการอะไรแบบนั้น:

development:
  adapter: postgresql
  encoding: unicode
  database: metals-directory_development
  pool: 5
  username: yourname
  password: passwordhere   ### password you have specified within psql
  host: localhost
  port: 5432               ### you can configure it in file postgresql.conf

นอกจากนี้หากคุณมีปัญหากับ postgresql คุณควรตรวจสอบpg_hba.conf


1
ฉันติดตั้งแล้ว แต่ตำแหน่งอยู่ที่ / usr / local / bin / psql และเมื่อฉันเรียกใช้ sudo -u postgres มันบอกว่า sudo: ผู้ใช้ที่ไม่รู้จัก: postgres
fadelakin

psql ควรทำงานถ้าคุณต้องการใช้ pg ในแอปของคุณ ลองพิมพ์ใน terminal psql metals-directory_development ผลลัพธ์ใด ๆ ถ้าไม่เช่นนั้นให้ลองติดตั้ง postgres ใหม่ลองทำเช่นนี้
Mihail Davydenkov

เมื่อฉันเรียกใช้ psql metals-directory_development ฉันได้รับ psql: ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าวเซิร์ฟเวอร์ทำงานในเครื่องและยอมรับการเชื่อมต่อบนซ็อกเก็ตโดเมน Unix "/tmp/.s.PGSQL.5432"? ฉันเป็นโปรแกรมเมอร์มือใหม่และฉันไม่รู้ว่ามันแปลว่าอะไร ฉันลองติดตั้งใหม่อีกหลายครั้ง แต่ก็ไม่มีโชค
fadelakin

23

ในการแก้ไขปัญหาประเภทนี้กับPostgresและทำงานกับPostgresต่อMac OSXไปนี่น่าจะเป็นทางออกที่ดีที่สุดและง่ายที่สุดที่ฉันเคยพบ:

http://postgresapp.com/

เพียงดาวน์โหลดติดตั้งและมีความสุข :)


19
  1. ถอนการติดตั้ง pg:

    gem uninstall pg
  2. ถอนการติดตั้ง postgres:

    brew uninstall postgres
  3. Nuke โฟลเดอร์ postgres ซึ่งอาจค้างอยู่กับสิ่งที่ค้างอยู่ใน:

    rm -rf /usr/local/var/postgres
  4. รีบูต (อาจไม่จำเป็น)

  5. ติดตั้ง pg อีกครั้ง:

    brew install postgres
  6. ความคิดเห็นของฉันในคำตอบของ Chris Slade เริ่มยากขึ้นตอนนี้ฉันใช้บริการชงที่ทำให้ชีวิตฉันง่ายขึ้นในหลาย ๆ ด้าน:

    brew install services
  7. และเริ่ม pg ด้วย:

    brew services start postgresql
  8. ติดตั้งอัญมณีอีกครั้ง:

    gem install pg

และ bobsyouruncle


3
ระวังด้วยวิธีนี้ ... นี่เป็นวิธีที่แผดเผาแผ่นดินและเป็นไปได้มากที่สุดที่จะทำลายดีบีเอสในพื้นที่ที่คุณมีอยู่ในปัจจุบัน ลองดูที่github.com/copiousfreetime/launchyที่ซึ่งคุณสามารถทำlunchy stop postgresตามได้lunchy start postgres
lacostenycoder

ฉันเชื่อว่าอูบุนตูsudo apt purge postgresqlหรือpostgresqlpachage อื่น ๆควรจะเพียงพอและมันจะทำลายทุกอย่าง
Fabrizio

ฉันทำสิ่งนี้และตอนนี้ได้รับข้อผิดพลาดต่อไปนี้: postgresql_adapter.rb: 709: ใน `rescue in connect ': FATAL: ฐานข้อมูล" project3_development "ไม่มีอยู่ (ActiveRecord :: NoDatabaseError) ฉันควรทำอย่างไรดี ? ฉันสามารถดูฐานข้อมูลใน rubymine ได้จริง
Franky Doul

13

ตรวจสอบไฟล์postgresql.conf (เปิดubuntuใน/etc/postgresql/XX/main/postgresql.conf ) แล้วมองหาบรรทัดที่ระบุว่า:

listen_addresses="localhost"

ลองเปลี่ยนเป็น:

listen_addresses="*"

มันจะยอมรับทุก IP ของต่อไปตรวจสอบบรรทัดที่ระบุว่า:

port=5432

และตรวจสอบว่าเป็นพอร์ตเดียวกันกับฐานข้อมูลของคุณหรือไม่โดยเริ่มต้นที่ postgresql-9.2 ของฉันใช้5433แทน5432อย่าลืมรีสตาร์ทเซิร์ฟเวอร์ postgres

โชคดี!


นี่คือปัญหาของฉันเช่นกัน ฉันสงสัยว่ามันเกิดขึ้นเพราะฉันมี 9.3 ที่ทำงานอยู่เมื่อฉันพยายามที่จะ "อัพเกรด" (เช่นติดตั้ง 9.5) ฉันเดาว่ามันกำลังพยายามที่จะสุภาพและกำหนดค่าตัวเองให้ทำงานแบบขนานบนพอร์ตที่แตกต่างกันแทนที่จะใช้เวลามากกว่าการติดตั้ง / กระบวนการที่มีอยู่
Joel Fouse

12

ตามที่อธิบายโดย @Magne ข้อผิดพลาดPG::ConnectionBad - could not connect to server: Connection refusedสามารถนำเสนอหลังจากการอัพเกรดรุ่นหลัก / รอง (เช่น9.5 -> 9.6หรือ9 -> 10) ของ PostgreSQL

ฉันได้รับข้อผิดพลาดนี้หลังจากทำงานbrew upgrade postgresqlหลังจากออกเวอร์ชัน PostgreSQL 9.6 ปัญหาคือการอัพเกรดรุ่นหลัก / รุ่นรองต้องการขั้นตอนเพิ่มเติมในการย้ายวันที่เก่าไปเป็นเวอร์ชั่นใหม่

วิธีตรวจสอบว่านี่เป็นปัญหาของคุณหรือไม่

คุณสามารถตรวจสอบว่านี่เป็นปัญหาหรือไม่โดยการตรวจสอบเวอร์ชั่นของ Brew สูตร PostgreSQL ล่าสุดที่ติดตั้งด้วย homebrew ...

$ brew info postgresql

/usr/local/Cellar/postgresql/9.5.4_1 (3,147 files, 35M)
Poured from bottle on 2016-10-14 at 13:33:28
/usr/local/Cellar/postgresql/9.6.1 (3,242 files, 36.4M) *
Poured from bottle on 2017-02-06 at 12:41:00

... แล้วเปรียบเทียบกับ PG_VERSION ปัจจุบัน

$ cat /usr/local/var/postgres/PG_VERSION
9.5

หาก PG_VERSION น้อยกว่าสูตรชงล่าสุดและความแตกต่างคือการเปลี่ยนแปลงรุ่นหลัก / รองนั่นอาจเป็นปัญหาของคุณ

วิธีแก้ไข (เช่นวิธีอัปเกรดข้อมูล)

คำแนะนำด้านล่างสำหรับการอัพเกรดจาก 9.5 เป็น 9.6 เปลี่ยนหมายเลขรุ่นตามความเหมาะสมสำหรับการอัปเกรดของคุณเอง

ขั้นตอนที่ 1ตรวจสอบให้แน่ใจว่าปิด PostgreSQL แล้ว:

$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
# or, with Homebrew...
$ brew services stop postgresql

ขั้นตอนที่ 2สร้างฐานข้อมูลเก่าแก่ใหม่:

$ initdb /usr/local/var/postgres9.6 -E utf8

ขั้นตอนที่ 3ตรวจสอบว่าไบนารีเวอร์ชันเก่าและใหม่คือ:

$ ls /usr/local/Cellar/postgresql/
9.5.3   9.5.4   9.6.1

โปรดทราบว่าในตัวอย่างนี้ฉันกำลังอัพเกรดจาก 9.5.4 ไบนารีเป็น 9.6.1 ไบนารี

ขั้นตอน 4.ย้ายข้อมูลปัจจุบันไปยังฐานข้อมูลใหม่โดยใช้ยูทิลิตี้ pg_upgrade

$ pg_upgrade \
  -d /usr/local/var/postgres \
  -D /usr/local/var/postgres9.6 \
  -b /usr/local/Cellar/postgresql/9.5.4/bin/ \
  -B /usr/local/Cellar/postgresql/9.6.1/bin/ \
  -v
  • -d flag ระบุไดเรกทอรีข้อมูลปัจจุบัน
  • -D flag ระบุไดเรกทอรีข้อมูลใหม่ที่จะสร้าง
  • -b ระบุไบนารีเก่า
  • -B ระบุไบนารีใหม่ที่เรากำลังอัปเกรดเป็น

ขั้นตอน 5.ย้ายไดเรกทอรีข้อมูลเก่าออกไป

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

ขั้นตอนที่ 6.ย้ายไดเรกทอรีข้อมูลที่สร้างขึ้นใหม่ไปยังตำแหน่งที่ PostgreSQL คาดว่าจะเป็น

$ mv /usr/local/var/postgres9.6 /usr/local/var/postgres

ขั้นตอนที่ 7เริ่ม PostgreSQL อีกครั้ง

$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
# or, if you're running a current version of Homebrew
$ brew services start postgresql

ขั้นตอนที่ 8หากคุณใช้ pg gem สำหรับ Rails คุณควรคอมไพล์อีกครั้งโดยถอนการติดตั้งและติดตั้ง gem ใหม่อีกครั้ง (ข้ามขั้นตอนนี้หากคุณไม่ได้ใช้ pg gem)

$ gem uninstall pg
$ gem install pg

ขั้นตอนที่ 9 (ตัวเลือก)หลังจากคุณมั่นใจได้ว่าทุกอย่างทำงานได้ดีคุณสามารถเรียกใช้พื้นที่ดิสก์ได้ด้วยคำสั่งต่อไปนี้:

brew cleanup postgresql

... และถ้าคุณรู้สึกกล้าจริง ๆ คุณสามารถลบไดเรกทอรีข้อมูล PostgreSQL เก่าด้วยคำสั่งต่อไปนี้

rm -rf /usr/local/var/postgres9.5/

(คำตอบนี้ขึ้นอยู่กับการโพสต์บล็อกที่ยอดเยี่ยมhttps://keita.blog/2016/01/09/homebrew-and-postgresql-9-5/พร้อมกับเพิ่มเติมบางส่วน)



7

ตามที่แนะนำข้างต้นฉันเพิ่งเปิดแอพ Postgresบน Mac ของฉันคลิกเปิดPsqlปิดpsqlหน้าต่างรีสตาร์ทเซิร์ฟเวอร์ Railsของฉันในเทอร์มินัลของฉันและมันก็ทำงานได้อีกครั้งไม่มีข้อผิดพลาดอีกต่อไป

เชื่อถือช้าง: http://postgresapp.com/


6

ฉันมีปัญหาเดียวกันหลังจากอัปเดตแม็คของฉันใน Osx Movaje

ฉันพบโซลูชันนี้:

ลองบรรทัดคำสั่งร้องก่อนใน terminal ของคุณ:

brew services restart postgresql

หากไม่มีอะไรเปลี่ยนแปลง:

ps aux | grep postgres

หากยังคงไม่มีอะไรเปลี่ยนแปลง:

ls -ls | grep post

คำสั่งสุดท้ายในการแก้ไขลบไฟล์ล็อค postgres โดยดำเนินการจากรูท:

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

แล้ว:

brew services restart postgresql

จาก berziiii: https://github.com/ga-wdi-boston/capstone-project/issues/325

หวังว่าจะช่วย :)

ความนับถือ !!


5

หากคุณประสบปัญหานี้หลังจากที่ทำการbrew upgradeปรับรุ่น postgres ให้เป็นรุ่นหลักใหม่ (f.ex 9.3.0เป็น9.4.0หรือสูงกว่า) ให้ทำดังนี้:

@ fix ของ dmitrygusev จากhttps://github.com/Homebrew/homebrew/issues/35240

คู่มือการโยกย้าย [Postgresql] อย่างเป็นทางการช่วย:

brew switch postgres 9.3.5    # presuming you already installed 9.4.1
pg_dumpall > outputfile
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
mv /usr/local/var/postgres /usr/local/var/postgres.old
brew switch postgres 9.4.1
initdb -D /usr/local/var/postgres
psql -d postgres -f outputfile

นั่นคือทั้งหมดที่ ตรวจสอบว่าการนำเข้าเป็นไปด้วยดีหรือไม่แล้วลบข้อมูลสำรอง:

rm outputfile
rm -Rf /usr/local/var/postgres.old

ปัญหาที่นี่คือว่าในการอัพเกรด postgres รุ่นใหญ่จำเป็นต้องสร้าง / ย้ายฐานข้อมูลของคุณใหม่ และอาจไดเรกทอรีหรือโทรด้วยตนเองchowninitdb

ดูเพิ่มเติม: วิธีอัปเกรด PostgreSQL จากเวอร์ชั่น 9.5 เป็นเวอร์ชั่น 9.6 โดยไม่ทำให้ข้อมูลสูญหาย?


เคล็ดลับอื่น ๆ ที่อาจเป็นประโยชน์ในกรณีที่คุณไม่ได้ใช้ Homebrew:

วิธีหยุดเซิร์ฟเวอร์ PG ด้วยตนเอง:

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

วิธีเริ่มเซิร์ฟเวอร์ PG ด้วยตนเอง:

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


4

ค้นหาไฟล์ postgres ของคุณที่อาจอยู่ใน/usr/local/var/postgres/หรือใน /usr/var/postgres/และจากนั้นลบpostmaster.pidไฟล์ที่มีอยู่ในโฟลเดอร์นั้น



2

ผู้ใช้ Mac ที่มีแอพ Postgres อาจต้องการเปิดแอปพลิเคชัน (ค้นหา Spotlight Postgres หรือค้นหาไอคอนรูปช้างในแถบเมนูของคุณ) ในนั้นคุณอาจเห็น X สีแดงพร้อมข้อความ: "Stale postmaster.pid file" น่าเสียดายที่การค้นหาสปอตไลท์ไม่แสดงตำแหน่งของไฟล์นี้ คลิก "การตั้งค่าเซิร์ฟเวอร์ ... " และในกล่องโต้ตอบที่เปิดขึ้นให้คลิกปุ่ม "แสดง" เพื่อเปิดไดเรกทอรีข้อมูล นำทางไปหนึ่งโฟลเดอร์ใน (สำหรับฉันมันคือ "var-10") และลบpostmaster.pidไฟล์

กลับไปที่แอพ Postgres และคลิกปุ่มเริ่ม X สีแดงนั้นควรเปลี่ยนเป็นเครื่องหมายถูกสีเขียวพร้อมกับข้อความ "กำลังทำงาน" ตอนนี้คุณควรจะสามารถรันคำสั่ง Rails ได้สำเร็จเหมือนrails serverในเทอร์มินัล

Postgres การตั้งค่าเซิร์ฟเวอร์แอป - แสดงไดเรกทอรีข้อมูล


วิธีนี้แก้ไขได้สำหรับฉัน ขอบคุณมากสำหรับการแก้ปัญหา! มันเป็นกระบวนการ!
boyd

2

ฉันเพิ่งมีปัญหานี้คืนนี้ทำงานในแอปพลิเคชันทางรถไฟที่ฉันได้ทำงานมาระยะหนึ่งแล้ว ปัญหาของฉันเกิดจากข้อเท็จจริงที่ว่าเซิร์ฟเวอร์ postgresql ของฉันไม่ทำงานของฉันไม่ได้ทำงาน

ฉันไปที่ด้านบนของหน้าจอ (ฉันใช้ Mac) แล้วคลิกไอคอนรูปช้างตัวเล็ก ๆ แล้วคลิก 'เริ่ม'

เปิดเซิร์ฟเวอร์ของเราไม่ได้อยู่

หวังว่านี่จะเป็นทางออกที่ง่ายสำหรับใครบางคน


1

มันเป็นคำตอบของ @Chris Slade แน่นอนซึ่งช่วยฉัน

ฉันเขียนสคริปต์เล็กน้อยเพื่อฆ่ากระบวนการที่เหลือหากมีประโยชน์:

kill_postgres() {
  if [[ $* -eq "" ]]; then
    echo "Usage: 'kill_postgres <db_name>' to kill remaining instances (Eg. 'kill_postgres my_app_development')"
  else
    gksudo echo "Granted sudo"
    pids="$(ps xa | grep postgres | grep $* | awk '{print $1}' | xargs)"
    if [[ $pids -eq "" ]]; then
      echo "Nothing to kill"
    else
      for pid in "${pids[@]}"
      do
        echo "Killing ${pid}"
        sudo kill $pid
        echo "Killed ${pid}"
      done
      kill_postgres $*
    fi
  fi
}

1

ฉันมีปัญหาเดียวกันในการผลิต (การพัฒนาทุกอย่างทำงาน) ในกรณีของฉันเซิร์ฟเวอร์ DB ไม่ได้อยู่ในเครื่องเดียวกับแอพดังนั้นในที่สุดสิ่งที่ทำงานก็คือการโยกย้ายโดยการเขียน:

bundle exec rake db:migrate RAILS_ENV=production

จากนั้นรีสตาร์ทเซิร์ฟเวอร์และทุกอย่างทำงานได้


1

ฉันรู้ว่ามันสาย แต่อาจช่วยใครซักคน ฉันมีปัญหาเดียวกัน ปรากฎว่าฉันต้องการ postgres สองเวอร์ชัน 9.1 และ 9.5 ฉันถอนการติดตั้ง 9.1 และ 9.5 และติดตั้ง 9.5 อีกครั้งและมันก็ใช้ได้สำหรับฉัน



1

ผมมีปัญหาเหมือนกัน. ผมตรวจสอบบรรทัดสุดท้ายของไฟล์บันทึกในPostgreSQL /var/log/postgresqlมีการกำหนดค่าพารามิเตอร์ที่ไม่รู้จักในไฟล์เป็น/etc/postgresql/9.5/main/postgresql.conf การแสดงความคิดเห็นบรรทัดข้อผิดพลาดในการpostgresql.confแก้ไขปัญหาของฉัน


1

ปัญหาของฉันอยู่ในไฟล์application.ymlของฉัน ฐานข้อมูลของฉันurlในherokuไม่ได้ใช้พอร์ต 5342. ตรวจสอบการตั้งค่าheroku var DATABASE_URLตรวจสอบให้แน่ใจว่าตรงกับที่อยู่ในapplication.ymlของคุณสำหรับฐานข้อมูลที่เกี่ยวข้อง


1

ฉันมีปัญหาเดียวกันคำอธิบายนี้แก้ไขได้สำหรับฉัน: http://blog.55minutes.com/2013/09/postgresql-93-brew-up-/-

ขั้นตอนสำคัญคือการดูที่ส่วนท้ายของ/usr/local/var/postgres/server.logของฉันที่ให้ฉันดูว่าปัญหาที่แท้จริงคืออะไรซึ่งก็คือฉันยังไม่เสร็จสิ้นกระบวนการอัพเกรด PostgreSQL อย่างสมบูรณ์


สถานการณ์ที่คล้ายกันที่นี่ - server.logที่สำคัญสำหรับผมก็ไปดูที่ พบคำตอบของฉันที่นี่: stackoverflow.com/questions/25970132/…
Nathan Wallace

1

ฉันแค่เรียกใช้คำสั่งนี้sudo service postgresql restart และทุกอย่างทำงานได้อีกครั้ง



0

ฉันพบข้อผิดพลาดนี้หลังจากbrew upgradeที่อัปเดต postgresql แล้ว ฉันพบวิธีแก้ไขปัญหาจากโพสต์ที่ยอดเยี่ยมนี้ ฉันสามารถรับ postgres สำรองและเรียกใช้และแม้แต่ย้ายฐานข้อมูลที่มีอยู่ทั้งหมดของฉัน https://coderwall.com/p/ti4amw/how-to-launch-postgresql-after-upgrade


0

ฉันเพิ่งมีปัญหานี้และไม่มีวิธีแก้ไขปัญหาที่แนะนำสำหรับฉัน หลังจาก googling มามากฉันหาวิธีแก้ปัญหา นี่คือสิ่งที่ได้ผลสำหรับฉัน

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

pg_ctl -D /usr/local/var/postgres start && brew services start postgresql

จากนั้นฉันก็รันคำสั่งนี้เพื่อเข้าถึง postgres

psql postgres

และที่พร้อมต์ของ postgres จากนั้นฉันพิมพ์ "\ du" เพื่อแสดงบทบาท

postgres=# \du

บทบาท postgres หายไปดังนั้นฉันต้องสร้างมันด้วยคำสั่งนี้

CREATE ROLE POSTGRES WITH SUPERUSER CREATEDB CREATEUSER CREATEROLE REPLICATION BYPASSRLS ;

นั่นช่วยแก้ไขปัญหาของฉันและฉันหวังว่าสิ่งนี้จะช่วยคนอื่นได้


0

คุณไม่จำเป็นต้องลบpostmaster.pidไฟล์เพราะอาจทำให้ข้อมูลเสียหายได้

ตัวเลือก? เพียงแค่killกระบวนการ (อย่าใช้kill -9เพียงแค่การฆ่าธรรมดาเท่านั้นที่จะทำได้)

จากนั้นเพียงแค่รีสตาร์ทเซิร์ฟเวอร์ postgres และคุณก็ไปได้!

นี่คือขั้นตอนเพื่อให้บรรลุว่า:

  1. ค้นหาและเปิดpostmaster.pidไฟล์ (Mine อยู่ใน Mac Sierra)

    vi ~/Library/Application\ Support/Postgres/var-10/postmaster.pid

  2. คัดลอก PID - เป็นตัวเลขในบรรทัดแรกของpostmaster.pidไฟล์

  3. ฆ่ากระบวนการด้วยkill PIDเช่นถ้า PID ของฉันคือ 381 ฉันจะทำkill 381
  4. เริ่มต้นใหม่ Postres - brew services start postgresqlถ้าใช้ชงทำ หรือถ้าใช้ postgresapp เพียงแค่คลิกที่startปุ่ม

0

ตัวจัดการแพ็กเกจ Homebrew มีตัวเรียกใช้งาน ctl เพื่อเริ่มต้นโดยอัตโนมัติ brew info postgresสำหรับข้อมูลเพิ่มเติมวิ่ง

เริ่มด้วยตนเอง:

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

หยุดด้วยตนเอง:

pg_ctl -D /usr/local/var/postgres stop

เริ่มโดยอัตโนมัติ:

"หากต้องการให้ launchd เริ่ม postgresql ทันทีและรีสตาร์ทเมื่อเข้าสู่ระบบ:"

brew services start postgresql

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