Адаптер Postgresql (pg): не удалось подключиться к серверу

Я получаю эту ошибку каждый раз, когда запускаю свое приложение Rails (оно не может подключиться к моему локальному Postgresql)

/Users/leonardo/.rvm/gems/ruby-1.9.3-p362/gems/activerecord-3.2.11/lib/
active_record/connection_adapters/postgresql_adapter.rb:1208:in `initialize': 
could not connect to server: No such file or directory (PG::Error)
   Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

Я использую Postgres.app, чтобы он работал правильно.

Если я сбегу

$ psql

Я могу правильно войти в консоль Postgresql.

$ which psql
 /Applications/Postgres.app/Contents/MacOS/bin/psql

Gemfile

source 'https://rubygems.org'
ruby "1.9.3"

gem 'rails', '3.2.11'
gem "pg"

database.yml

development:
  adapter: postgresql
  encoding: unicode
  username: leonardo
  password: 
  database: zapping
  port: 5432  

Postgresql (консоль)

$ psql
leonardo=# \l

введите описание изображения здесь


person sparkle    schedule 08.01.2013    source источник
comment
вы можете попробовать добавить host: localhost в свой database.yml? (на основе этого ответа: stackoverflow.com/a/10793186/919641)   -  person pjam    schedule 09.01.2013
comment
Если вы добавите его в ответы, я буду отмечен как принятый   -  person sparkle    schedule 09.01.2013
comment
Спасибо, делаю это сейчас :)   -  person pjam    schedule 09.01.2013


Ответы (15)


Попробуйте добавить host: localhost в свой database.yml. (На основе: https://stackoverflow.com/a/10793186/919641)

person pjam    schedule 08.01.2013

Ваш Pg гем был скомпилирован с использованием PostgreSQL libpq, предустановленной в Mac OS X, и вы используете psql, который вы установили в более новой версии, или наоборот.

Это можно обойти, указав соединение TCP / IP, добавив localhost к database.yml, но лучше скомпилировать гем Pg против libpq для сервера, на котором вы фактически работаете. Для этого вы должны иметь возможность установить переменную среды PATH в папку с правильным pg_config перед компиляцией. В вашем случае это будет где-то в пределах Postgres.app.

person Craig Ringer    schedule 09.01.2013
comment
Крейг, не могли бы вы уточнить это? Где и какой env. переменную я должен установить точно? - person Rizon; 20.01.2013
comment
Спасибо, этот ответ помог мне это исправить. Шаги, которые я предпринял, были просты: 1) gem uninstall pg, 2) bundle install, готово. - person haslo; 04.12.2013
comment
Отличный ответ, и хотя обновление database.yml тоже работает, я думаю, что это, вероятно, лучшее и самое правильное решение этой проблемы. Если вы, скажем, установили Postgresql через Homebrew после установки pg, вы можете увидеть эту ошибку. Затем следуйте инструкциям @ haslo выше. - person SexxLuthor; 07.02.2018

Если не работает даже после добавления host: localhost, удалите postmaster.pid

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

person Pradyumna Shembekar    schedule 25.06.2017
comment
Это решило мою проблему. Несмотря на то, что запуск brew services start postgresql показал, что он был успешным, запуск ps x | grep postgres показал, что сервер не запущен. Я выполнил шаги, описанные здесь (включая удаление postmaster.pid), и это решило проблему для меня: coderwall.com/p/zf-fww/ - person Mike Vallano; 11.09.2017
comment
Это работает, если ваш компьютер выходит из строя, и вы выполняете принудительное завершение работы, но postgres не был завершен должным образом, иногда файл pid застревает там ... его удаление помогает возобновить работу. - person Joshua F. Rountree; 25.10.2017
comment
Нет, нет, НЕ делайте этого! Это только нормально, если вы убедитесь, что никакие процессы postgres все еще не выполняются. Это должно быть редко, если вообще когда-либо необходимо; это может возникнуть только в том случае, если какому-то другому процессу назначен pid, который был у почтмейстера. - person Craig Ringer; 07.02.2018
comment
Должно быть нормально для локальных подключений postgres. - person Pradyumna Shembekar; 09.02.2018
comment
Это была моя проблема, я не понимаю ответ @CraigRinger выше, какой в ​​этом вред? Когда он наконец запустился, сервис сразу же перестроил его для меня. - person David Greco; 23.09.2018
comment
@DavidGreco postmaster.pid служит блокировкой, которая останавливает запуск одного postgres, пока другой продолжает запись в файл базы данных. Если вы удалите его, у вас могут быть два (или более) процесса postgres, которые будут писать в одну и ту же базу данных без согласования друг с другом, что приведет к массовому повреждению базы данных. Итак, не делайте этого, если вы не сделали абсолютно уверены в том, что никакие другие процессы postgres не выживают и не обращаются к тому же каталогу данных. - person Craig Ringer; 09.10.2018

вам следует добавить host: localhost в конфигурацию вашей базы данных ...

person BvuRVKyUVlViVIc7    schedule 08.01.2013
comment
Я не уверен, почему мне отказали, я ответил за 5 минут до этого! принятый ответ (который имеет то же решение, что и мой пост)? - person BvuRVKyUVlViVIc7; 17.02.2015
comment
Спасибо. В моем случае пришлось добавить host: db. - person Jason Kim; 15.08.2016

У меня была такая же проблема на Mac. Оказалось, что psql, который у меня был на моем пути, работал некорректно. Попробуйте запустить psql, набрав:

~/projects/some_project/project-rails$ psql
  psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

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

Исправлено, добавив правильную версию pgsql в мой PATH:

export PATH=/Applications/Postgres.app/Contents/MacOS/bin:$PATH

Теперь psql (и rails) счастливы!

person paneer_tikka    schedule 19.07.2013
comment
также потребовалась переустановка pg gem - person wik; 28.08.2013

У меня была такая же проблема. Вам нужно запустить / запустить postgres. Postgres, должно быть, недавно перестал работать на моем компьютере, поэтому мне пришлось убедиться, что он работает, запустив сервер postgres.

postgres -D /usr/local/var/postgres

Затем сработали следующие команды (которые вызывали у меня ту же ошибку, что и у вас):

bundle exec rake db:create db:migrate
bundle exec rspec
person L. Stepanek    schedule 02.11.2016

У меня была эта проблема. Один из приведенных здесь комментариев помог мне решить проблему.

Спасибо, этот ответ помог мне это исправить. Шаги, которые я предпринял, были просты: 1) удаление gem pg, 2) установка пакета, готово. - haslo 03 дек.

gem uninstall pg
bundle install
person Jared Menard    schedule 20.11.2017
comment
Это исправило это для меня. Я удалил / переустановил postgres, и гем нужно было перестроить. - person jmccartie; 27.02.2018

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

brew postgresql-upgrade-database

Он обновил данные postgresql и переместил мою старую версию. У меня была 9.6 вместо 10.4

Нашел решение здесь

person Mr. Rene    schedule 12.06.2018

найти / -имя 'postgresql.conf'

netstat -an | grep 5432 # => /tmp/.s.PGSQL.5432

vi / Пользователи / администратор / Библиотека / Приложение \ Поддержка / Postgres93 / var / postgresql.conf

ОТ: unix_socket_directories = '/ tmp'

TO: unix_socket_directories = '/ var / pgsql_socket'

судо mkdir / var / pgsql_socket

sudo chmod 777 / var / pgsql_socket

person the-teacher    schedule 13.01.2014
comment
Это решение, в конечном итоге в моем случае, устранило бы мою проблему с невозможностью запуска Rails. Я пошел немного по другому пути, чтобы осознать это. Я фактически создал символическую ссылку, как описано в Этот пост < / а> - person rwheadon; 16.03.2014

Для героку это все, что нужно.

heroku addons:create heroku-postgresql

production:
 adapter: postgresql
 encoding: unicode
 host: localhost
 # For details on connection pooling, see rails configuration guide
 # http://guides.rubyonrails.org/configuring.html#database-pooling
 pool: 5
person jmontross    schedule 14.07.2015

У меня просто была проблема, что приложение postgres не работало на моем Mac ...

person Yoko    schedule 21.12.2017

На Mac у меня были разные версии postgresql. Эта проблема была решена, когда я попробовал brew switch postgresql 9.5.5 (я не думаю, что на данный момент номер версии имеет значение)

$ brew switch postgresql 9.5.5
Cleaning /usr/local/Cellar/postgresql/9.6.1
Cleaning /usr/local/Cellar/postgresql/9.6.5
Cleaning /usr/local/Cellar/postgresql/10.2
Cleaning /usr/local/Cellar/postgresql/10.3
Cleaning /usr/local/Cellar/postgresql/9.5.5
Cleaning /usr/local/Cellar/postgresql/9.5.4

Кстати, все данные исчезнут. Думаю, есть команда brew для этого без переключения версии, которую я не нашел.

person kangkyu    schedule 30.03.2018

У меня была такая же проблема с OS High sierra 10.13. Я следовал инструкциям с этого веб-сайта. Я загрузил версию 10.4 ref: https://postgresapp.com/

Затем я добавил это в профиль bash: export PATH = $ PATH: /Library/PostgreSQL/10.4/bin: $ PATH

перезапустить терминал.

Откройте новое окно терминала и введите: psql -U postgres

после этого вы увидите это сообщение: psql (10.4) Введите «help» для получения справки.

postgres = #

person Community    schedule 02.06.2018

Моя проблема заключалась в том, что файл /etc/hosts изменился и не имел этой важной записи: 127.0.0.1 localhost

person dani24    schedule 04.10.2018

У меня была аналогичная проблема - когда я запускал команду psql в терминале, я все еще получал ту же ошибку, так что это говорило мне, что это не проблема с гемом pg, и я должен проверить саму настройку postgres. Поэтому я проверил журналы postgres - в моем случае они были расположены в /usr/local/var/log/postgres.log, и я увидел следующую ошибку:

dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.66.dylib
  Referenced from: /usr/local/opt/postgresql/bin/postgres

Итак, знание точной ошибки помогло мне решить проблему, в моем случае на основе этого ответа, который я запустил

brew switch icu4c 66.1

который решил проблему после перезапуска postgres:

brew services restart postgresql
person Ben    schedule 23.09.2020