PG :: ConnectionBad – Impossible de se connecter au serveur: Connexion refusée

Chaque fois que je lance mon serveur rails 4.0, je reçois cette sortie.

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 `resortingeve_connection' activerecord (4.0.0) lib/active_record/connection_handling.rb:79:in `resortingeve_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 ' railties (4.0.0) lib/rails/commands.rb:73:in `' bin/rails:4:in `' 

J’utilise Mavericks OS X 10.9, donc je ne sais pas si c’est le problème. J’ai tout essayé mais rien ne semble fonctionner. J’ai désinstallé et installé à la fois postgres et le pg gem plusieurs fois maintenant.

Ceci est mon fichier 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 

Quelqu’un peut-il m’aider?

Cela pourrait être aussi simple qu’un fichier PID obsolète. Il peut échouer en silence car votre ordinateur n’a pas terminé complètement le processus d’arrêt, ce qui signifie que postgres n’a pas supprimé le fichier PID (id de processus).

Le fichier PID est utilisé par postgres pour s’assurer qu’une seule instance du serveur est exécutée à la fois. Donc, quand il redémarre, il échoue car il existe déjà un fichier PID qui indique à postgres qu’une autre instance du serveur a été démarrée (même si elle n’est pas en cours d’exécution, il n’a simplement pas pu arrêter et supprimer le PID) .

  1. Pour le réparer, supprimez / renommez le fichier PID. Recherchez le répertoire de données postgres. Sur un MAC utilisant l’homebrew, il s’agit de /usr/local/var/postgres/ , d’autres systèmes pouvant être /usr/var/postgres/ .
  2. Pour vous assurer que c’est le problème, consultez le fichier journal ( server.log ). Sur les dernières lignes, vous verrez:

FATAL: le fichier de locking “postmaster.pid” existe déjà
CONSEIL: Un autre postmaster (PID 347) s’exécute-t-il dans le répertoire de données “/ usr / local / var / postgres”?

  1. Si oui, rm postmaster.pid
  2. Redémarrez votre serveur. Sur un mac utilisant launchctl (avec homebrew), les commandes suivantes vont redémarrer le serveur.

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

    OU sur les nouvelles versions de Brew

     brew services restart postgresql 

Après beaucoup de recherches et d’parsings, j’ai trouvé une solution si vous utilisez ubuntu, écrivez simplement cette commande dans votre terminal et appuyez sur Entrée.

 sudo service postgresql restart 

Cela va redémarrer votre PostgreSQL, en espérant que cela vous aidera.

J’ai réussi à résoudre le problème en suivant la réponse de Chris Slade, mais pour redémarrer le serveur, j’ai dû utiliser les commandes suivantes:

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

que j’ai trouvé ici (la réponse de pjammer en bas)

Pour résoudre ce type de problèmes avec Postgres et travailler avec Postgres sur Mac OSX , il s’agit probablement de la MEILLEURE et de la solution la plus simple que j’ai trouvée à ce jour:

http://postgresapp.com/

Il suffit de télécharger, installer et être heureux 🙂

Avez-vous installé postgresql dans votre système? Sinon, regardez ensuite Installer postgresql . Une fois que vous avez réussi à intégrer postgresql dans votre système, vous pouvez taper quelque chose comme ça dans votre terminal système:

 which psql #=> /usr/bin/psql 

Après cela, vous devez créer un utilisateur et une firebase database dans postgresql comme ceci:

 sudo su - postgres psql 

Ensuite, vous pouvez voir ce qui suit dans votre terminal

 postgres=# 

Tapez là:

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

Après cela, vous devez corriger votre database.yml . Vous avez probablement besoin de quelque chose comme ça:

 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 

Aussi, si vous avez des problèmes avec postgresql, c’est une bonne idée de vérifier pg_hba.conf

  1. Désinstaller pg:

     gem uninstall pg 
  2. Désinstallez postgres:

     brew uninstall postgres 
  3. Nuke le dossier postgres qui pourrait se retrouver avec un tas de trucs obsolètes dans:

     rm -rf /usr/local/var/postgres 
  4. Redémarrer (peut-être inutile)

  5. Réinstallez pg:

     brew install postgres 
  6. Mon commentaire dans la réponse de Chris Slade commence par le difficile, maintenant j’utilise les services d’infusion qui ont simplifié ma vie à bien des égards:

     brew install services 
  7. Et commencez avec pg:

     brew services start postgresql 
  8. Réinstallez le bijou:

     gem install pg 

Et bobsyouruncle.

Ce problème survient lorsque postgres ne s’arrête pas correctement. Voici comment j’ai résolu ce problème en trois étapes simples.

Etape 1: Accédez à votre répertoire postgres

Les utilisateurs de Mac trouveront ceci dans /usr/local/var/postgres , d’autres pourront consulter /usr/var/postgres/ .

Étape 2: Supprimez le fichier .pid en exécutant cette commande.

 rm postmaster.pid 

Étape 3: redémarrez votre serveur

Utilisateurs Mac

 brew services restart postgresql 

Utilisateurs Linux

 sudo service postgresql restart 

Enfin, redémarrez votre application et vous êtes prêt à partir.

vérifiez le fichier postgresql.conf (sur ubuntu dans /etc/postgresql/XX/main/postgresql.conf ) et cherchez la ligne qui dit:

 listen_addresses="localhost" 

essayez de le changer pour:

 listen_addresses="*" 

il serait accepter chaque adresse IP, vérifiez ensuite la ligne qui dit:

 port=5432 

et vérifiez si le même port de votre database.yml, par défaut sur mon postgresql-9.2 utilise 5433 au lieu de 5432 , n’oubliez pas de redémarrer le serveur postgres,

Bonne chance!

Comme décrit par @Magne, l’erreur PG::ConnectionBad - could not connect to server: Connection refused peut être présentée suite à une mise à niveau de version majeure / mineure (par exemple: 9.5 -> 9.6 ou 9 -> 10 ).

J’ai eu cette erreur après avoir lancé la brew upgrade postgresql après la sortie de PostgreSQL version 9.6. Le problème est que les mises à niveau de version majeure / mineure nécessitent des étapes supplémentaires pour migrer l’ancienne date vers la nouvelle version.

Comment vérifier si c’est votre problème

Vous pouvez vérifier si c’est le problème en vérifiant la dernière version de la formule de armsage PostgreSQL installée avec 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 

… puis en le comparant à la PG_VERSION actuelle

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

Si la PG_VERSION est inférieure à la dernière formule d’infusion et que la différence est une modification majeure / mineure, c’est probablement votre problème.

Comment réparer (c.-à-d. Comment mettre à niveau les données)

Les instructions ci-dessous concernent une mise à niveau de 9,5 à 9,6. Modifiez les numéros de version en fonction de votre propre mise à niveau

Étape 1. Assurez-vous que PostgreSQL est désactivé:

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

Étape 2. Créer une nouvelle firebase database vierge:

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

Étape 3. Vérifiez les anciennes et les nouvelles versions binarys:

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

Notez que dans cet exemple, je passe de 9.5.4 binary à 9.6.1 binary

Étape 4. Migrez les données actuelles vers la nouvelle firebase database à l’aide de l’utilitaire 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 spécifie le répertoire de données en cours
  • -D flag spécifie le nouveau répertoire de données à créer
  • -b spécifie l’ancien binary
  • -B spécifie le nouveau binary que nous mettons à jour

Étape 5. Déplacer l’ancien répertoire de données

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

Étape 6. Déplacer le répertoire de données nouvellement créé vers où PostgreSQL s’attend à ce qu’il soit

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

Étape 7. Redémarrez PostgreSQL

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

Étape 8. Si vous utilisez le gem pg pour Rails, vous devez le recomstackr en désinstallant et en réinstallant le gem (ignorez cette étape si vous n’utilisez pas le gem pg)

 $ gem uninstall pg $ gem install pg 

Étape 9. (facultatif) Après vous être assuré que tout fonctionne correctement, vous pouvez exécuter à nouveau la récupération de l’espace disque à l’aide de la commande suivante:

 brew cleanup postgresql 

… et si vous vous sentez vraiment courageux, vous pouvez supprimer l’ancien répertoire de données PostgreSQL avec la commande suivante

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

(Cette réponse est basée sur un excellent article de blog https://keita.blog/2016/01/09/homebrew-and-postgresql-9-5/ avec quelques ajouts)

Comme suggéré ci-dessus, je viens d’ouvrir l’ application Postgres sur mon Mac, j’ai cliqué sur Ouvrir Psql , fermé la fenêtre psql , redémarré mon serveur de rails dans mon terminal, et cela fonctionnait à nouveau, plus d’erreur.

Faites confiance à l’éléphant: http://postgresapp.com/

C’est ce qui m’a vraiment aidé.

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

Référence: http://alumni.lewagon.org/questions/60

Si vous rencontrez ce problème après avoir effectué une brew upgrade qui a mis à niveau postgres vers une nouvelle version majeure (f.ex 9.3.0 à 9.4.0 ou version ultérieure), 9.4.0 comme 9.4.0 :

@ le correctif de dmitrygusev de https://github.com/Homebrew/homebrew/issues/35240

À la suite du guide de migration officiel [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 

C’est tout. Vérifiez si l’importation s’est bien déroulée, puis supprimez les sauvegardes:

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

Le problème ici est que sur une mise à niveau de version majeure de postgres, il est nécessaire de recréer / migrer votre firebase database. Et éventuellement répertoires chown ou appeler manuellement initdb .

Voir aussi: Comment mettre à niveau PostgreSQL de la version 9.5 vers la version 9.6 sans perdre de données?


Quelques autres astuces qui pourraient vous être utiles, au cas où vous n’utiliseriez pas Homebrew:

Comment arrêter le serveur PG manuellement:

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

Comment démarrer le serveur PG manuellement:

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

mettre l’ host: localhost dans le fichier database.yml et exécuter cette commande:

 rake db:create db:migrate 

Localisez votre fichier postgres dans /usr/local/var/postgres/ ou dans /usr/var/postgres/ puis supprimez le fichier postmaster.pid présent dans ce dossier.

Je viens de lancer cette commande sudo service postgresql restart et tout a fonctionné à nouveau.

Ce fut définitivement la réponse de @Chris Slade qui m’a aidé.

J’ai écrit un petit script pour tuer les processus restants si cela était utile:

 kill_postgres() { if [[ $* -eq "" ]]; then echo "Usage: 'kill_postgres ' 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 } 

J’ai eu le même problème en production (tout a fonctionné pour le développement), dans mon cas le serveur de firebase database n’est pas sur la même machine que l’application, donc ce qui a fonctionné est juste de migrer en écrivant:

 bundle exec rake db:migrate RAILS_ENV=production 

puis redémarrez le serveur et tout a fonctionné.

Je sais que c’est en retard mais pourrait aider quelqu’un. J’avais le même problème. Il s’avère que deux versions de Postgres 9.1 et 9.5 étaient disponibles. J’ai désinstallé 9.1 et 9.5 et installé à nouveau 9.5 et cela a fonctionné pour moi.

J’ai eu le même problème. I Vérifiez la dernière ligne des fichiers journaux PostgreSQL dans /var/log/postgresql . Il y avait un paramètre de configuration non reconnu dans le fichier /etc/postgresql/9.5/main/postgresql.conf . Commenter la ligne d’erreur dans postgresql.conf résolu mon problème.

Mon problème était dans mon fichier application.yml . L’ url ma firebase database sur heroku n’utilisait pas le port 5342. Vérifiez votre configuration d’ heroku var DATABASE_URL . Assurez-vous que correspond exactement à était dans votre application.yml pour la firebase database applicable.

J’ai eu le même problème, cette explication m’a résolu: http://blog.55minutes.com/2013/09/postgresql-93-brew-upgrade/

L’étape clé consistait à examiner la fin de mon fichier /usr/local/var/postgres/server.log , ce qui m’a permis de voir quel était le véritable problème, à savoir que je n’avais pas terminé complètement le processus de mise à niveau de PostgreSQL.

Les utilisateurs Mac disposant de l’application Postgres peuvent souhaiter ouvrir l’application (surligner la recherche Postgres ou trouver l’icône d’éléphant dans votre barre de menus). Vous pouvez voir un X rouge avec le message: “Fichier postmaster.pid obsolète”. Malheureusement, une recherche Spotlight ne montre pas l’emplacement de ce fichier. Cliquez sur “Paramètres du serveur …”, et dans la boîte de dialog qui s’ouvre, cliquez sur le bouton “Afficher” pour ouvrir le répertoire de données. Naviguer dans un dossier (pour moi c’était “var-10”), et supprimer le fichier postmaster.pid .

Revenez à l’application Postgres et cliquez sur le bouton Démarrer. Ce X rouge devrait devenir une coche verte avec le message “Running”. Vous devriez maintenant pouvoir exécuter avec succès les commandes Rails comme le rails server dans le terminal.

Postgres App Server Settings - Afficher le répertoire de données

Vous avez probablement redémarré votre ordinateur et oublié de lancer l’application Postgres.

J’ai arrêté le serveur de rails, j’ai lancé rake db:migrate et démarrer mes rails s .

Je suis tombé sur cette erreur après avoir suivi une brew upgrade à brew upgrade dans laquelle postgresql a été mis à jour. J’ai trouvé exactement comment résoudre mon problème à partir de cet article génial. J’ai pu restaurer et exécuter postgres et même migrer sur toutes mes bases de données existantes. https://coderwall.com/p/ti4amw/how-to-launch-postgresql-after-upgrade

Je viens d’avoir ce problème et aucune des solutions suggérées n’a fonctionné pour moi. Après beaucoup de recherches sur Google, j’ai trouvé une solution. C’est ce qui a fonctionné pour moi.

Tout d’abord, j’ai dû exécuter cette commande pour démarrer le serveur et je devine définir l’emplacement du fichier de configuration.

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

Puis j’ai couru cette commande pour accéder à postgres

 psql postgres 

Et à l’invite postgres, j’ai tapé “\ du” pour lister les rôles

 postgres=# \du 

Le rôle postgres manquait donc je devais le créer avec cette commande

 CREATE ROLE POSTGRES WITH SUPERUSER CREATEDB CREATEUSER CREATEROLE REPLICATION BYPASSRLS ; 

Cela a résolu mon problème et j’espère que cela aidera quelqu’un d’autre.

Vous n’avez pas besoin de supprimer le fichier postmaster.pid , car cela pourrait entraîner une corruption des données.

Option? kill simplement le processus (n’utilisez pas kill -9 , juste un kill ordinaire fera l’affaire).

Ensuite, redémarrez simplement le serveur postgres et vous êtes prêt à partir!

Voici les étapes pour y parvenir:

  1. Recherchez et ouvrez le fichier postmaster.pid (le mien est sur Mac Sierra)

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

  2. Copiez le PID – c’est le numéro sur la première ligne du fichier postmaster.pid

  3. Tuer le processus avec kill PID , par exemple, si mon PID est 381, je vais kill 381
  4. Redémarrer les postres – si vous utilisez l’infusion, les brew services start postgresql . Ou si vous utilisez postgresapp, cliquez simplement sur le bouton start