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 216

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 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 файл, выполнив эту команду.

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, которые имеют упростил мою жизнь во многих отношениях:

    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. создать новую первозданную базу данных:

$ 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 для Rails, вы должны перекомпилировать удаление и переустановка 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-and-postgresql-9-5/ С некоторыми дополнениями)

как было предложено выше, я только что открыл Сервер Приложений на моем Mac, нажмите Открыть Psql, закрыт

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

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

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

если вы попали в эту проблему после выполнения brew upgrade который обновил postgres до новой основной версии (f. ex 9.3.0 до 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

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

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

поставить host: localhost in database.yml файл и выполните следующую команду:

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/главная/базы данных 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.журнал , это позволило мне увидеть, в чем была настоящая проблема, которая заключалась в том, что я не полностью завершил процесс обновления 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-это номер в первой строке postmaster.pid file

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