PG :: ConnectionBad - Verbindung zum Server konnte nicht hergestellt werden: Verbindung abgelehnt

270

Jedes Mal, wenn ich meinen Rails 4.0-Server betreibe, erhalte ich diese Ausgabe.

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>'

Ich verwende Mavericks OS X 10.9, daher weiß ich nicht, ob dies das Problem ist. Ich habe alles versucht, was ich konnte, aber nichts scheint zu funktionieren. Ich habe jetzt sowohl postgres als auch das pg gem mehrmals deinstalliert und installiert.

Dies ist meine database.yml-Datei

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
Fadelakin
quelle
2
Versuchen Sie, 'host: localhost' in Ihre database.yml einzufügen.
Surendra Bobba
1
@trajan das habe ich schon gemacht. Ich habe diesen Thread sogar verwendet, als ich anfing, nach einer Lösung zu suchen. Ich habe meine Datei database.yml gepostet. Sie können es sich ansehen. Vielleicht könnte es helfen.
Fadelakin
Zeigen Sie Ihre pg_hba.conf
Pronix
2
Vergessen Sie nicht, die Postgres-App einzuschalten, wenn Sie diese verwenden.
Pavan Katepalli
1
Vielen Dank, dass Sie mich daran erinnert haben, die App @PavanKatepalli einzuschalten! Guter Anruf;)
catch22

Antworten:

637

Es könnte so einfach sein wie eine veraltete PID-Datei . Möglicherweise schlägt dies stillschweigend fehl, da Ihr Computer den Herunterfahrvorgang nicht vollständig abgeschlossen hat. Dies bedeutet, dass postgres die PID- Datei (Prozess-ID) nicht gelöscht hat .

Die PID-Datei wird von postgres verwendet, um sicherzustellen, dass jeweils nur eine Instanz des Servers ausgeführt wird. Wenn es erneut gestartet wird, schlägt es fehl, da bereits eine PID- Datei vorhanden ist, die postgres mitteilt, dass eine andere Instanz des Servers gestartet wurde (obwohl sie nicht ausgeführt wird, konnte sie die PID nicht herunterfahren und löschen). .

  1. Um dies zu beheben, entfernen Sie die PID-Datei / benennen Sie sie um. Suchen Sie das Datenverzeichnis von postgres. Unter macOS mit Homebrew ist es in /usr/local/var/postgres/oder auf /usr/local/var/log/anderen Systemen /usr/var/postgres/.
  2. Überprüfen Sie die Protokolldatei ( server.log), um sicherzustellen, dass dies das Problem ist . In den letzten Zeilen sehen Sie:

FATAL: Sperrdatei "postmaster.pid" existiert bereits
TIPP: Läuft ein anderer Postmaster (PID 347) im Datenverzeichnis "/ usr / local / var / postgres"?

  1. Wenn ja, rm postmaster.pid
  2. Starten Sie Ihren Server neu. Auf einem Mac mit launchctl (mit Homebrew) starten die folgenden Befehle den Server neu.

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

    ODER bei neueren Versionen von Brew

    brew services restart postgresql
Chris Slade
quelle
24
# 2 ist ein großartiger Vorschlag: "Check server.log". Mein Fehler wurde tatsächlich durch ein Upgrade auf Yosemite verursacht. Im Serverprotokoll stand : FATAL: could not open directory "pg_tblspc": No such file or directory. Diese Antwort half mir bei diesem Problem stackoverflow.com/questions/25970132/…
Paul Kaplan
20
Ich habe dies nur positiv bewertet, weil es mir genug gab, um das Problem des verbrannten Erdstils zu beheben. Ich habe pg ( gem uninstall pg) deinstalliert, postgres ( brew uninstall postgres) deinstalliert und dann den Postgres-Ordner, der mit ein paar veralteten Sachen in ( rm -rf /usr/local/var/postgres) verweilte, zerstört . Nach einem Neustart brew install postgres, ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents, launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist, und ARCHFLAGS="-arch x86_64" gem install pg. Ich weiß nicht, wie viele andere Lösungen ich ausprobiert habe, bevor dies funktioniert.
IAmNaN
2
Ist die Datei postmaster.opts dieselbe wie die Datei postmaster.pid?
ARTLoe
31
Für neuere Brew-Benutzer lautet der Befehl für # 4brew services restart postgresql
streetlogics
7
Für mich (MAC, Homebrew) war die Protokolldatei/usr/local/var/log/postgres.log
DZack
44

Nach langem Suchen und Analysieren habe ich eine Lösung gefunden, wenn Sie Ubuntu verwenden. Schreiben Sie diesen Befehl einfach in Ihr Terminal und drücken Sie die Eingabetaste

sudo service postgresql restart

Dadurch wird Ihr PostgreSQL neu gestartet. Ich hoffe, dies ist hilfreich für Sie.

Jai Kumar Rajput
quelle
3
Vielen Dank 1000 mal. Ich habe gerade meine Ubuntu-Version aktualisiert und dies für mich behoben.
Mauricio Moraes
Obwohl sich die Frage auf OSX Mavericks bezieht, ist diese Lösung für Ubuntu-Installationen praktisch, wenn bei der Migration oder beim Serverstart etwas Skurriles passiert.
Jerome
39

Dieses Problem tritt auf, wenn postgres nicht ordnungsgemäß heruntergefahren wird. So habe ich dieses Problem in drei einfachen Schritten gelöst.

Schritt 1: Wechseln Sie in Ihr Postgres-Verzeichnis

Mac-Benutzer finden dies in /usr/local/var/postgres, andere sehen es sich möglicherweise an /usr/var/postgres/.

Schritt 2: Entfernen Sie die .pidDatei, indem Sie diesen Befehl ausführen .

rm postmaster.pid

Schritt 3: Starten Sie Ihren Server neu

Mac-Benutzer

brew services restart postgresql

Linux-Benutzer

sudo service postgresql restart

Starten Sie schließlich Ihre App neu und Sie können loslegen.

Techdreams
quelle
33

Ich habe es geschafft, das Problem zu lösen, indem ich der Antwort von Chris Slade gefolgt bin, aber um den Server neu zu starten, musste ich die folgenden Befehle verwenden:

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

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

das habe ich hier gefunden (pjammers antwort unten)

Andrea Gherardi
quelle
25

Haben Sie postgresql in Ihrem System installiert? Wenn nicht, sehen Sie sich postgresql installieren an . Nachdem Sie postgresql erfolgreich in Ihr System integriert haben, können Sie Folgendes in Ihr Systemterminal eingeben :

which psql
#=> /usr/bin/psql

Danach müssen Sie einen Benutzer und eine Datenbank in postgresql wie folgt erstellen:

sudo su - postgres
psql

Dann können Sie Folgendes in Ihrem Terminal sehen

postgres=#

Geben Sie dort ein:

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

Nachdem Sie dies getan haben, müssen Sie Ihre korrigieren database.yml. Wahrscheinlich brauchen Sie so etwas:

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

Auch wenn Sie Probleme mit postgresql haben, ist es eine gute Idee, pg_hba.conf zu überprüfen

Mihail Davydenkov
quelle
1
Ich habe es installiert, aber der Speicherort ist / usr / local / bin / psql und wenn ich sudo -u postgres starte, heißt es sudo: unbekannter Benutzer: postgres
fadelakin
psql sollte funktionieren, wenn Sie pg in Ihrer App verwenden möchten. Versuchen Sie, das Terminal psql metal-directory_development einzugeben. Irgendwelche Ergebnisse? Wenn nicht, dann versuchen Sie, postgres neu zu installieren, versuchen Sie dies zum Beispiel
Mihail Davydenkov
Wenn ich psql metal-directory_development ausführe, erhalte ich psql: Verbindung zum Server konnte nicht hergestellt werden: Keine solche Datei oder kein solches Verzeichnis Wird der Server lokal ausgeführt und akzeptiert Verbindungen auf dem Unix-Domain-Socket "/tmp/.s.PGSQL.5432"? Ich bin ein Anfänger-Rail-Programmierer und ich habe keine Ahnung, was das bedeutet. Ich habe mehrfach versucht, postgres neu zu installieren, aber kein Glück.
Fadelakin
23

Um diese Art von Problemen mit fix Postgres und zur Arbeit mit Postgres auf Mac OSX, ist dies wahrscheinlich die beste und die einfachste Lösung , die ich bisher gefunden:

http://postgresapp.com/

Einfach herunterladen, installieren und glücklich sein :)

KM Rakibul Islam
quelle
19
  1. Deinstallieren Sie pg:

    gem uninstall pg
  2. Deinstallieren Sie postgres:

    brew uninstall postgres
  3. Nuke den Postgres-Ordner, in dem sich möglicherweise ein paar veraltete Sachen befinden:

    rm -rf /usr/local/var/postgres
  4. Neustart (möglicherweise nicht erforderlich)

  5. Neu installieren pg:

    brew install postgres
  6. Mein Kommentar in Chris Slades Antwort beginnt auf die harte Tour. Jetzt benutze ich Brauservices, die mein Leben in vielerlei Hinsicht vereinfacht haben:

    brew install services
  7. Und fang damit an:

    brew services start postgresql
  8. Installieren Sie den Edelstein neu:

    gem install pg

Und Bobsyouruncle.

IAmNaN
quelle
3
Seien Sie vorsichtig mit dieser Methode ... dies ist ein Ansatz mit verbrannter Erde und wird höchstwahrscheinlich alle lokalen Datenbanken zerstören, die Sie derzeit haben. lunchy stop postgreslunchy start postgres
Werfen
Ich glaube, auf Ubuntu sollte sudo apt purge postgresqljedes andere postgresqlPachage ausreichen und es wird alles zerstören.
Fabrizio Bertoglio
Ich habe dies getan und erhalte jetzt den folgenden Fehler: postgresql_adapter.rb: 709: in "Rettung in Verbindung": FATAL: Datenbank "project3_development" existiert nicht (ActiveRecord :: NoDatabaseError). Was soll ich machen ? Ich kann die Datenbank tatsächlich in Rubymine sehen.
Franky Doul
13

Überprüfen Sie die Datei postgresql.conf (on ubuntubefindet sich in /etc/postgresql/XX/main/postgresql.conf ) und suchen Sie nach der Zeile mit der Aufschrift :

listen_addresses="localhost"

Versuchen Sie es zu ändern in:

listen_addresses="*"

Es würde jede IP akzeptieren, als nächstes überprüfen Sie die Zeile, die sagt:

port=5432

und prüfen , ob der gleich Port Ihren database.yml ist standardmäßig auf meiner postgresql-9.2 Verwendung 5433 statt 5432 , vergessen Sie nicht starten den Postgres - Server,

Viel Glück!

Alexis
quelle
Das war auch mein Problem. Ich vermute, dass es passiert ist, weil ich bereits 9.3 ausgeführt habe, als ich versucht habe, ein Upgrade durchzuführen (dh 9.5 zu installieren). Ich vermute, es wurde versucht, höflich zu sein und sich so zu konfigurieren, dass es parallel auf einem anderen Port ausgeführt wird, anstatt die vorhandene Installation / den vorhandenen Prozess zu übernehmen.
Joel Fouse
12

Wie von @Magne beschrieben, kann der Fehler PG::ConnectionBad - could not connect to server: Connection refusednach einem Upgrade der Haupt- / Nebenversion (z. B. 9.5 -> 9.6oder 9 -> 10) von PostgreSQL angezeigt werden .

Ich habe diesen Fehler erhalten, nachdem ich ihn brew upgrade postgresqlnach der Veröffentlichung von PostgreSQL Version 9.6 ausgeführt habe. Das Problem ist, dass für Upgrades der Haupt- / Nebenversion zusätzliche Schritte erforderlich sind, um das alte Datum auf die neue Version zu migrieren.

So überprüfen Sie, ob dies Ihr Problem ist

Sie können überprüfen, ob dies das Problem ist, indem Sie die neueste PostgreSQL-Version der Brühformel überprüfen, die mit 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

... und dann mit der aktuellen PG_VERSION vergleichen

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

Wenn die PG_VERSION kleiner als die neueste Brühformel ist und der Unterschied in einer Änderung der Haupt- / Nebenversion besteht, ist dies wahrscheinlich Ihr Problem.

So beheben Sie das Problem (dh wie aktualisieren Sie die Daten)

Die folgenden Anweisungen gelten für ein Upgrade von 9.5 auf 9.6. Ändern Sie die Versionsnummern entsprechend Ihrem eigenen Upgrade

Schritt 1. Stellen Sie sicher, dass PostgreSQL ausgeschaltet ist:

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

Schritt 2. Erstellen Sie eine neue makellose Datenbank:

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

Schritt 3. Überprüfen Sie die alten und neuen Binärversionen:

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

Beachten Sie, dass ich in diesem Beispiel ein Upgrade von 9.5.4 binär auf 9.6.1 binär durchführe

Schritt 4. Migrieren Sie die aktuellen Daten mit demDienstprogramm pg_upgrade in die neue Datenbank.

$ 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 gibt das aktuelle Datenverzeichnis an
  • -D Flag gibt das neu zu erstellende Datenverzeichnis an
  • -b Gibt die alte Binärdatei an
  • -B Gibt die neue Binärdatei an, auf die wir aktualisieren

Schritt 5. Verschieben Sie das alte Datenverzeichnis aus dem Weg

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

Schritt 6. Verschieben Sie das neu erstellte Datenverzeichnis an die Stelle, an der PostgreSQL es erwartet

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

Schritt 7. Starten Sie PostgreSQL erneut

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

Schritt 8. Wenn Sie den pg-Edelstein für Rails verwenden, sollten Sie ihn neu kompilieren, indem Sie den Edelstein deinstallieren und neu installieren (überspringen Sie diesen Schritt, wenn Sie den pg-Edelstein nicht verwenden).

$ gem uninstall pg
$ gem install pg

Schritt 9. (optional) Nachdem Sie sich vergewissert haben, dass alles in Ordnung ist, können Sie mit dem folgenden Befehl etwas Speicherplatz zurückgewinnen:

brew cleanup postgresql

... und wenn Sie sich wirklich mutig fühlen, können Sie das alte PostgreSQL-Datenverzeichnis mit dem folgenden Befehl löschen

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

(Diese Antwort basiert auf einem ausgezeichneten Blog-Beitrag https://keita.blog/2016/01/09/homebrew-and-postgresql-9-5/ mit einigen Ergänzungen)

Neil Atkinson
quelle
7

Wie oben vorgeschlagen, habe ich gerade die Postgres-App auf meinem Mac geöffnet Psql, auf Öffnen geklickt , das psqlFenster geschlossen , meinen Rails-Server in meinem Terminal neu gestartet und es hat wieder funktioniert, kein Fehler mehr.

Vertrauen Sie dem Elefanten: http://postgresapp.com/

houstongolden
quelle
6

Ich habe das gleiche Problem, nachdem ich meinen Mac auf Osx Movaje aktualisiert habe.

Ich habe diese Lösung gefunden:

Versuchen Sie zuerst die folgende Befehlszeile in Ihrem Terminal:

brew services restart postgresql

Wenn sich nichts ändert:

ps aux | grep postgres

Wenn sich noch nichts ändert:

ls -ls | grep post

Der letzte Befehl, um das Problem zu beheben, entfernte die Postgres-Sperrdatei durch Ausführen von root:

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

und dann :

brew services restart postgresql

Von berziiii: https://github.com/ga-wdi-boston/capstone-project/issues/325

Hoffe das wird helfen :)

Grüße !!

Basile
quelle
5

Wenn Sie auf dieses Problem brew upgradestoßen, nachdem Sie ein Postgres-Upgrade auf eine neue Hauptversion (z. B. 9.3.0auf 9.4.0oder höher) durchgeführt haben, gehen Sie folgendermaßen vor:

@ dmitrygusevs Fix von https://github.com/Homebrew/homebrew/issues/35240

Der folgende offizielle [Postgresql] Migrationsleitfaden hat geholfen:

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

Das ist alles. Überprüfen Sie, ob der Import gut funktioniert hat, und löschen Sie dann die Sicherungen:

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

Das Problem hierbei ist, dass bei einem größeren Versions-Upgrade von Postgres die Datenbank neu erstellt / migriert werden muss. Und möglicherweise chownVerzeichnisse oder manuell aufrufen initdb.

Siehe auch: Wie kann ich PostgreSQL von Version 9.5 auf Version 9.6 aktualisieren, ohne Daten zu verlieren?


Einige andere Tipps, die nützlich sein können, falls Sie Homebrew nicht verwenden:

So stoppen Sie den PG-Server manuell:

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

So starten Sie den PG-Server manuell:

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

Magne
quelle
4

Suchen Sie Ihre Postgres Datei , um sie in sein könnte /usr/local/var/postgres/oder in /usr/var/postgres/und löschen Sie dann die postmaster.pidDatei in diesen Ordner.

Awais Shafqat
quelle
3

setzen host: localhostin database.ymlDatei und starten Sie diesen Befehl ein :

rake db:create db:migrate  
Abel
quelle
2

Mac-Benutzer mit der Postgres-App möchten möglicherweise die Anwendung öffnen (Postgres im Rampenlicht suchen oder das Elefantensymbol in Ihrer Menüleiste finden). Darin sehen Sie möglicherweise ein rotes X mit der Meldung: "Stale postmaster.pid file". Leider wird bei einer Spotlight-Suche der Speicherort dieser Datei nicht angezeigt. Klicken Sie auf "Servereinstellungen ..." und klicken Sie im daraufhin angezeigten Dialogfeld auf die Schaltfläche "Anzeigen", um das Datenverzeichnis zu öffnen. Navigieren Sie in einem Ordner (für mich war es "var-10") und löschen Sie die postmaster.pidDatei.

Kehren Sie zur Postgres-App zurück und klicken Sie auf die Schaltfläche Start. Dieses rote X sollte sich in ein grünes Häkchen mit der Meldung "Running" verwandeln. Jetzt sollten Sie Rails-Befehle wie rails serverim Terminal erfolgreich ausführen können .

Postgres App Server-Einstellungen - Datenverzeichnis anzeigen

chemturion
quelle
Das hat es für mich gelöst. Vielen Dank für die Lösung! Es war ein Prozess!
Boyd
2

Ich hatte heute Abend gerade dieses Problem, als ich an einer Schienenanwendung arbeitete, an der ich schon eine Weile gearbeitet habe. Mein Problem war einfach darauf zurückzuführen, dass mein Postgresql-Server nicht lief .

Ich ging zum oberen Bildschirmrand (ich bin auf einem Mac) und klickte auf das kleine Elefantensymbol und dann auf "Start".

Schaltet unseren Server nicht ein.

Hoffentlich bietet dies eine einfache Lösung für jemanden.

Solidstatejake
quelle
1

Es war definitiv die Antwort von @Chris Slade, die mir geholfen hat.

Ich habe ein kleines Skript geschrieben, um diese verbleibenden Prozesse zu beenden, wenn dies nützlich ist:

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
}
Augustin Riedinger
quelle
1

Ich hatte das gleiche Problem in der Produktion (Entwicklung hat alles funktioniert). In meinem Fall befindet sich der DB-Server nicht auf demselben Computer wie die App. Schließlich funktionierte die Migration nur durch Schreiben:

bundle exec rake db:migrate RAILS_ENV=production

und dann den Server neu starten und alles hat funktioniert.

leah
quelle
1

Ich weiß, dass dies spät ist, aber vielleicht jemandem helfen könnte. Ich hatte das gleiche Problem. Es stellt sich heraus, dass ich zwei Versionen von Postgres 9.1 und 9.5 hätte. Ich habe 9.1 und 9.5 deinstalliert und 9.5 erneut installiert und es hat bei mir funktioniert.

Darshan Chauhan
quelle
1

Sie haben Ihren Computer wahrscheinlich neu gestartet und vergessen, die Postgres-App zu starten.

Der Zauber von Oz
quelle
1

Ich hatte das gleiche Problem. Ich checke die letzte Zeile der PostgreSQLProtokolldateien ein /var/log/postgresql. In der Datei /etc/postgresql/9.5/main/postgresql.conf gab es einen nicht erkannten Konfigurationsparameter . Das Kommentieren der Fehlerzeile in hat postgresql.confmein Problem behoben.

Hajar Homayouni
quelle
1

Mein Problem war in meiner application.yml- Datei. Meine Datenbank urlauf herokunicht - Port 5342. Überprüfen Sie Ihre herokuKonfiguration var DATABASE_URL. Stellen Sie sicher, dass in Ihrer application.yml genau die Übereinstimmung mit der entsprechenden Datenbank vorhanden ist.

NickDK
quelle
1

Ich hatte das gleiche Problem, diese Erklärung löste es für mich: http://blog.55minutes.com/2013/09/postgresql-93-brew-upgrade/

Der wichtigste Schritt war das Betrachten des Endes meines /usr/local/var/postgres/server.log , anhand dessen ich das eigentliche Problem erkennen konnte, nämlich , dass ich den Upgrade-Prozess für PostgreSQL noch nicht vollständig abgeschlossen hatte

Ben Wheeler
quelle
Ähnliche Situation hier - der Schlüssel für mich war auch zu sehen server.log. Ich habe meine Antwort hier gefunden: stackoverflow.com/questions/25970132/…
Nathan Wallace
1

Ich habe gerade diesen Befehl ausgeführt sudo service postgresql restart und alles hat wieder funktioniert.

Kalibbala
quelle
0

Ich habe den Rails-Server gestoppt, bin gelaufen rake db:migrateund habe meinen gestartet rails s.

thedanotto
quelle
0

Ich bin auf diesen Fehler brew upgradegestoßen, nachdem ich einem gefolgt bin, in dem postgresql aktualisiert wurde. In diesem großartigen Beitrag habe ich genau herausgefunden, wie ich mein Problem beheben kann. Ich konnte Postgres wieder zum Laufen bringen und sogar über alle meine vorhandenen Datenbanken migrieren. https://coderwall.com/p/ti4amw/how-to-launch-postgresql-after-upgrade

Calaway
quelle
0

Ich hatte gerade dieses Problem und keine der vorgeschlagenen Lösungen funktionierte für mich. Nach vielem googeln habe ich eine Lösung gefunden. Das hat bei mir funktioniert.

Zuerst musste ich diesen Befehl ausführen, um den Server zu starten, und ich vermute, den Speicherort der Konfigurationsdatei festgelegt zu haben.

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

Dann habe ich diesen Befehl ausgeführt, um auf Postgres zuzugreifen

psql postgres

Und an der Postgres-Eingabeaufforderung habe ich "\ du" eingegeben, um die Rollen aufzulisten

postgres=# \du

Die Postgres-Rolle fehlte, daher musste ich sie mit diesem Befehl erstellen

CREATE ROLE POSTGRES WITH SUPERUSER CREATEDB CREATEUSER CREATEROLE REPLICATION BYPASSRLS ;

Das hat mein Problem gelöst und ich hoffe, das hilft jemand anderem.

luis.madrigal
quelle
0

Sie müssen die postmaster.pidDatei nicht löschen , da dies möglicherweise zu einer Beschädigung der Daten führt.

Möglichkeit? Einfach killder Prozess (nicht verwenden kill -9, nur ein gewöhnlicher Kill reicht aus).

Dann starten Sie einfach den Postgres-Server neu und los geht's!

Hier sind die Schritte, um dies zu erreichen:

  1. Suchen und öffnen Sie die postmaster.pidDatei (meine ist auf Mac Sierra)

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

  2. Kopieren Sie die PID - dies ist die Nummer in der ersten Zeile der postmaster.pidDatei

  3. Beenden Sie den Prozess mit kill PID, z. B. wenn meine PID 381 ist, werde ich tunkill 381
  4. Starten Sie Postres neu - wenn Sie Brew verwenden, tun Sie dies brew services start postgresql. Oder wenn Sie postgresapp verwenden, klicken Sie einfach auf die startSchaltfläche
Ruto Collins
quelle
0

Der Homebrew-Paketmanager enthält Launchctl-Listen, die automatisch gestartet werden. Weitere Informationen finden Sie unter brew info postgres.

Manuell starten:

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

Manuell anhalten:

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

Automatisch starten:

"Damit startd postgresql jetzt startet und beim Login neu startet:"

brew services start postgresql

user3402754
quelle