PG:: ConnectionBad-не удалось подключиться к серверу: соединение отказано

каждый раз, когда я запускаю сервер 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 несколько раз.

Это моя база данных.файл 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

может кто-нибудь помочь мне?

27 ответов


это может быть так же просто, как черствый PID файл. Это может быть сбой молча, потому что ваш компьютер не завершил процесс выключения полностью, что означает postgres не удалить PID (идентификатор процесса) файл.

файл PID используется postgres, чтобы убедиться, что только один экземпляр сервера работает одновременно. Поэтому, когда он запускается снова, он терпит неудачу, потому что уже есть PID что говорит postgres что другой экземпляр сервера был запущен (даже если он не работает, он просто не добрался до выключения и удаления PID).

  1. чтобы исправить это, удалите / переименуйте файл PID. Найдите каталог данных postgres. На MAC с помощью homebrew это /usr/local/var/postgres/, другие системы это может быть /usr/var/postgres/.
  2. чтобы убедиться, что это проблема, посмотрите на лог-файл (server.log). На последних строках вы увидите:

смертельный: заблокировать файл " почтмейстер.пид" уже существует
Подсказка: другой почтмейстер (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
    

после большого поиска и анализа я нашел решение, если вы используете ubuntu, просто напишите эту команду в своем терминале и нажмите enter

sudo service postgresql restart

этого перезагрузится вашим PostgreSQL, надеюсь, что это будет behelp для вас.


мне удалось решить проблему, следуя ответу Криса Слейда, но для перезапуска сервера мне пришлось использовать следующие команды:

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

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

что я нашел здесь (ответ pjammer внизу)


чтобы исправить эти проблемы с Postgres и работать с Postgres on Mac OSX, Это, наверное лучшие и простой решение, которое я нашел до сих пор:

http://postgresapp.com/

просто скачайте, установите и будьте счастливы :)


у вас установлен 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


эта проблема возникает, когда postgres не закрывается должным образом. Вот как я решил эту проблему в три простых шага.

Шаг 1: перейдите в каталог postgres

Пользователи Mac найдете это в /usr/local/var/postgres, другие могут посмотреть /usr/var/postgres/.

Шаг 2: удалить .pid file, выполнив эту команду.

rm postmaster.pid

Шаг 3: перезагрузить сервер

Mac Пользователи

brew services restart postgresql

Пользователей Linux

sudo service postgresql restart

наконец перезагрузите приложение, и вы хорошо идти.


  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. мой комментарий в ответе Криса Слейда начинается с pg, теперь я использую brew services, который имеет упростил мою жизнь во многих отношениях:

    brew install services
  7. и начните pg с него:

    brew services start postgresql
  8. переустановите gem:

    gem install pg

и bobsyouruncle.


проверить файл postgresql.conf (on ubuntu - в / etc/postgresql/X. X/main / postgresql.conf ) и найдите строку, которая говорит:

listen_addresses="localhost"

попробуйте изменить его на:

listen_addresses="*"

он будет принимать каждый IP-адрес, затем проверьте строку, которая говорит:

port=5432

и проверьте, является ли тот же порт вашей базы данных.в формате YML, по умолчанию по моему в PostgreSQL-9.2 использовать 5433 вместо 5432 не забудьте перезагрузка сервер postgres,

Удачи!


как описано @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 меньше, чем последняя формула brew, и разница-это основное/незначительное изменение версии, то это, вероятно, ваша проблема.

как исправить (т. е. Как обновить данные)

ниже инструкции для обновления 9.5 и 9.6. Измените номера версий, соответствующие вашему собственному обновлению

Шаг 1. убедитесь, что PostgreSQL выключен:

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

Шаг 2. создайте новую базу данных pristine:

$ 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 флаг указывает текущий каталог данных
  • -D флаг указывает новый каталог данных для создания
  • -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 (пропустите этот шаг, если вы не используете PG gem)

$ gem uninstall pg
$ gem install pg

Шаг 9.(необязательно) после того, как вы убедили себя, что все работает нормально, вы можете запустить восстановление дискового пространства со следующей командой:

brew cleanup postgresql

...и если вы чувствуете себя очень храбрым, вы можете удалить старый каталог данных PostgreSQL со следующей командой

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

(этот ответ на основе отличной записи в блоге https://keita.блог/2016/01/09/homebrew-и-postgresql-9-5/ С некоторыми дополнениями)


как было предложено выше, я просто открыл Postgres App на моем Mac, нажмите Открыть Psql, закрыт


Это то, что действительно помогло мне.

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

ссылка: http://alumni.lewagon.org/questions/60


если вы нажмете эту проблему после выполнения brew upgrade который обновил postgres до новой основной версии (f.ex 9.3.0 to 9.4.0 или выше), то делаем так:

@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 необходимо воссоздать / перенести базу данных. И, возможно,chown каталоги или вручную вызов initdb.

Читайте также: Как обновить PostgreSQL с версии 9.5 до версии 9.6 без потери данных?


некоторые другие советы, которые могут пригодиться, если вы не используете Homebrew:

как остановить сервер PG вручную:

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

как запустите PG server вручную:

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


поставить host: localhost на database.yml file и запустите эту команду:

rake db:create db:migrate  

найдите файл postgres, который может быть в /usr/local/var/postgres/ или /usr/var/postgres/ а затем удалите postmaster.pid файл присутствует в этой папке.


Я просто запускаю эту команду sudo service postgresql restart и все снова работало.


Это был определенно ответ @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 }' | 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
}

У меня была такая же проблема в производстве (разработка все работало), в моем случае сервер БД не на той же машине, что и приложение, поэтому, наконец, то, что сработало, просто перенести, написав:

bundle exec rake db:migrate RAILS_ENV=production

и затем перезапустите сервер и все работало.


Я знаю, что это поздно, но может кому-то помочь. У меня была та же проблема. Оказывается, у меня было две версии postgres 9.1 и 9.5. Я удалил 9.1 и 9.5 и снова установил 9.5, и это сработало для меня.


у меня была та же проблема. Я проверяю последнюю строку PostgreSQL файлы журнала в /var/log/postgresql. В файле / etc/postgresql/9.5/main / postgresql.conf. Комментируя строку ошибки в postgresql.conf решена моя проблема.


моя проблема была в моей приложение.в формате YML. Моя база данных url on heroku не использовал порт 5342. Проверьте свой heroku config var DATABASE_URL. Убедитесь, что совпадает с вашим приложение.в формате YML для соответствующей базы данных.


У меня была такая же проблема, это объяснение решило ее для меня:http://blog.55minutes.com/2013/09/postgresql-93-brew-upgrade/

ключевой шаг смотрел на хвост моего / usr / local/var/postgres / server.log , это позволило мне увидеть, в чем заключалась настоящая проблема, а именно, что я не полностью завершил процесс обновления PostgreSQL


пользователи Mac с приложением Postgres могут захотеть открыть приложение (spotlight search Postgres или найти значок слона в строке меню). Там вы можете увидеть красный крестик с надписью: "почтмейстер.пид файл". К сожалению, поиск spotlight не покажет местоположение этого файла. Нажмите " Настройки Сервера...", и в открывшемся диалоговом окне нажмите кнопку" Показать", чтобы открыть каталог данных. Перейдите в одну папку (для меня это был "var-10") и удалите postmaster.pid файл.

вернитесь в приложение Postgres и нажмите кнопку Пуск. Этот красный X должен превратиться в зеленую галочку с сообщением "работает". Теперь вы должны иметь возможность успешно запускать команды Rails, такие как rails server в терминале.

Postgres App Server Settings - Show Data Directory


вы, вероятно, перезагрузили компьютер и забыли запустить приложение Postgres.


Я остановил сервер rails, побежал rake db:migrate и начал rails s.


я столкнулся с этой ошибкой после brew upgrade в котором был обновлен postgresql. Я нашел именно то, как исправить мою проблему с этого замечательного поста. Я смог восстановить и запустить postgres и даже перенести все существующие базы данных. https://coderwall.com/p/ti4amw/how-to-launch-postgresql-after-upgrade


у меня просто была эта проблема, и ни одно из предложенных решений не сработало для меня. После долгих поисков в гугле я нашел решение. Это то, что сработало для меня.

во-первых, мне пришлось запустить эту команду, чтобы запустить сервер, и я предполагаю, установить местоположение файла конфигурации.

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 ;

это решило мою проблему, и я надеюсь, что это поможет кому-то еще.


вам не нужно удалять postmaster.pid файл, так как это может привести к повреждению данных.

? Просто kill процесс (не используйте kill -9, просто обычное убийство будет делать).

затем просто перезагрузите сервер postgres, и вы хорошо идти!

вот шаги для достижения этого:

  1. найдите и откройте postmaster.pid файл (мой на Mac Сьерра)

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

  2. скопируйте PID-это номер в первой строке

  3. убить процесс с kill PID, например, если мой PID 381, я сделаю kill 381
  4. перезапустить Postres-при использовании brew, do brew services start postgresql. Или если через postgresapp, просто щелкните